Meteor入門

來源:互聯網
上載者:User

標籤:

Meteor是什麼

基於nodejs的即時web APP開發架構。

Meteor能帶來什麼

簡單的說,你可以用js搞定用戶端、服務端的開發。另外,用戶端、服務端的界限被極大的模糊。用戶端的介面跟服務端的資料是雙向繫結的,修改服務端的資料,使用者介面會隨著更新;你也可以在用戶端直接修改服務端的資料庫。

系統的歸納下,對於(前端)開發人員來說,可能比較迷人的點。

  • 統一開發語言:用戶端、服務端都可以用js搞定。
  • 提高開發效率:開發人員可以用10行左右的代碼就開發出一個具有多點即時更新的應用,因為底層架構已經幫你處理好了資料更新、資料同步以及介面更新的工作。
  • 資料驅動下的多端同步更新機制:基於DDP協議,服務端資料的修改會引起用戶端介面的更新,同時用戶端對資料的改動也會同步到服務端。
  • 統一外掛程式系統:同樣的外掛程式,可以同時運行在用戶端、服務端。
  • 簡易熱部署:通過簡單的命令,即可快速部署到生產系統。同時對所有當前已連結的應用進行更新。
  • 高即時性:通過巧妙的延遲補償策略,讓終端的使用者感覺是在訪問一個即時無延遲的應用。
  • 原生應用:可通過編譯工具,將web app編譯成原生的終端應用程式
  • 資料庫訪問:用戶端、服務端都可以直接存取資料庫(安全性隱患)
getting started

demo請點擊,參照官方demo進行的仿寫,進一步進行了簡化。也可直接參考官方demo

meteor的入門demo還是比較好上手的。跟著ste by step的教程走,基本就可以搗鼓出一個像樣的TODO LIST的demo了,所以這裡也不打算細講,只是挑一些重點備忘下。

首先,安裝meteor,然後通過meteor create這個命令建立一個新項目。

meteor create meteor-todo-list

建立好的項目結構如下。

大致包含以下內容。有點像傳統的web頁面,1個HTML頁面,再加1個css檔案、1個js檔案。

.├── .meteor  // 項目依賴的package,在這個小demo裡我們可以先忽略├── meteor-todo-list.css    // 頁面相關的css├── meteor-todo-list.html  //  頁面入口檔案└── meteor-todo-list.js  // 頁面主邏輯
meteor-todo-list.html

開啟html頁面,你會發現只有headbodytemplate三個標籤。如果接觸過模版引擎的同學會有中熟悉之感。其中:

  • headbody兩個標籤中的內容,最終會被嵌入到輸出給終端使用者的HTML頁面中。
  • template則定義了頁面需要用到的模版,有點向web component規範看齊的意味。

舉例來說,head標籤中內容如下

<head>    <title>程式猿小卡的meteor demo</title>    </head

我們訪問頁面就可以看到title為程式猿小卡

至於body標籤,如果對handlebars熟悉的同學,大致就知道是幹嘛用的了。{{>create}}引入定義好的模版,該模版的namecreate{{#each tasks}}則是對資料進行遍曆,至於資料來源,下面會提到。

<body>    {{>create}}    <div class="todo-items">        {{#each tasks}}            {{>task}}        {{/each}}    </div></body>

我們再來看看這段模版。namecreate,就可以在頁面裡方便的通過create這個名字來引用這段模版(包括模版嵌套)。而模版資料會在 meteor-todo-list.js 小節提到。

<template name="create">    <div class="">        <input type="text" placehodler="輸入todo項" class="js-text" />        <button class="js-add">建立</button>    </div></template>
meteor-todo-list.js

開啟meteor-todo-list.js,會看到一行顯眼的代碼。正如meteor官方介紹所說,meteor應用的代碼可以同時跑在用戶端、服務端。有些情境下,某些代碼只適合跑在用戶端,那麼,就可以用下面的判斷。

if( Meteor.isClient ){    //...}

meteor-todo-list.html裡其實就一堆模版。相應的,需要為這些模版提供資料。資料大都是存在資料庫的,那麼就需要有資料庫操作

除了資料之外,還要處理使用者互動,那麼就涉及到事件綁定

1、資料 & 資料庫操作

資料在meteor應用了扮演了極為重要的角色,作為即時雙向更新的引用,meteor服務端資料的修改,會導致用戶端介面的更新。同時,用戶端使用者操作導致的資料更新,也會即時同步到服務端。 
比如這段代碼,意思就是,模版body用到的tasks資料,就是這個同名方法的傳回值。

  Template.body.helpers({    tasks: function(){      return Tasks.find({});    }  });

比如頁面有這麼一段無聊的模版,那麼就可以通過Template.nonsense.helpers來註冊nonsense這段模版需要用到的資料。我們的頁面裡其實沒有namebody的模版,這是因為內部做了特殊處理,bodyhead標籤預設當模板對待了。

<template name="nonsense">    <p>hello {{nick}}</p></template>

下面來講資料庫操作,這裡用到了人民福士熱愛已久的mongodb

首先,我們我們建立collections,對應的是一系列的文檔集合,下面我們做的就是對這個文檔集合進行操作,比如增、刪、改、查,這四大操作demo裡都覆蓋到了。

var Tasks = new Mongo.Collection("tasks");

舉個例子,返回所有的task資料,類似mysql裡的select *

return Tasks.find({});

插入一條task

Tasks.insert({text: value, createdAt: new Date()});

其餘操作類似,這裡不贅述,更多細節參考官方文檔。

2、事件綁定

相當直觀。以下面代碼為例。更多細節參考官方文檔

  1. Template.create.events表示為 create 這個模版渲染出來的節點綁定事件。
  2. click .js-add表示:為.js-add這個選取器匹配中的節點監聽click事件。
  3. event就是常規的事件對象。而template相當於模版自身的引用,可以通過template.$(selector)來選中模版內部的子節點。(類似backbone內部節點操作的設計)
  Template.create.events({    ‘click .js-add‘: function(event, template){      var (‘.js-text‘),          value = $input.val();      Tasks.insert({text: value, createdAt: new Date()});      $input.val(‘‘);    }  });
meteor-todo-list.css

沒什麼好講的,跳過。。。

DDP協議

DDP是 分布式資料協議 (Distributed Data Protocol)的簡稱,meteor雙向即時更新機制的底層依賴的就是這東東。官方協議

粗略瞄了下協議,大致有兩個特點:

  1. 平台無關的通用協議:DDP只是定義了協議的格式和一些規範,但具體用什麼語言在什麼平台上實現無所謂,你可以用js寫,也可以用java寫。
  2. json格式:從協議說明,以及實際抓包來看,服務端、用戶端資料通訊採用的都是json格式的資料,前端極為友好~

實際看看例子。在chrome控制台下,切到WebSocket這個tab,就會看到不斷的有收發包。部分是使用者操作發出(如刪除操作),部分是用於保持通訊狀態的心跳包。(可以這樣翻譯吧。。)

協議比較長,內容本身倒是不複雜,有興趣的自行圍觀。。。

package

meteor有自己的包管理機制,也有個專門的社區在維護 https://atmospherejs.com/ 。關於這個,有空再單獨拎出來講講。

編譯原生應用

同樣沒什麼好講的,直接貼上官方文檔地址 https://www.meteor.com/try/7 ,有空再貼幾章。。

附錄

TODO demo:https://github.com/chyingp/meteor-todo-list 
官網:https://www.meteor.com/ 
入門教程:https://www.meteor.com/install 
DDP協議:https://github.com/meteor/meteor/blob/devel/packages/ddp/DDP.md

Meteor入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.