javascriptMVC教程 — 9.開始使用jQueryMX–View

來源:互聯網
上載者:User

  JavaScriptMVC的views就是用戶端模版,用來提取資料和返回字串。一般情況下,這個字串就是用於插入到DOM中的html代碼。$.View是一個模版介面,使用模版完成複雜的工作:

  • 方便和統一的文法
  • 從html元素或者外部檔案載入模版
  • 同步或者非同步載入模版
  • 與載入模版
  • 緩衝或者處理模版
  • 產品編譯的過程中綁定模版
  • 對$.Deferred 的支援

  javascriptMVC預先打包了4種不同的模版引擎:EJS、JAML、Micro和Tmpl。下面的教程將使用EJS模版引擎,但是對於其他引擎也是適用的,只是需要你對代碼做少量修改。

 

  基本應用

  當使用視圖的時候,你總是需要把模版渲染的結果插入到頁面中,$.View重寫了jquery的modifiers,你可以很容易的使用視圖:

$("#foo").html('mytemplate.ejs',{message: 'hello world'})

上面的程式碼完成了下面三步工作:

1.從mytemplate.ejs中載入模版,模版內容如下:

<h2><%= message %></h2>

2.使用{message: 'hello world'}渲染結果:

<h2>hello world</h2>

3.把結果插入到頁面中的foo元素中,結果如下:

<div id='foo'><h2>hello world</h2></div>

 

  jQuery Modifiers

  你可以使用下面的jquery modifiers方法使用模版:

$('#bar').after('temp.ejs',{});$('#bar').append('temp.ejs',{});$('#bar').before('temp.ejs',{});$('#bar').html('temp.ejs',{});$('#bar').prepend('temp.ejs',{});$('#bar').replaceWith('temp.ejs',{});$('#bar').text('temp.ejs',{});

 

  從scripts標籤載入

  View可以從scripts標籤或者外部檔案載入模板,使用scripts標籤的方式需要添加type屬性,內容為text/ejs,同時需要添加一個id屬性,如下:

<script type='text/ejs' id='recipesEJS'><% for(var i=0; i < recipes.length; i++){ %>  <li><%=recipes[i].name %></li><%} %></script>

 像下面這樣使用,第一個參數為scripts標籤的id:

$("#foo").html('recipesEJS', recipeData)

 

  $.View和子模板

  有時候你只想渲染字串,可以使用$.View(TEMPLATE , data )完成工作,向$.View傳送模板的路徑和需要顯示的資料:

var html = $.View("template/items.ejs", items );

最常用的例子是子模板,從項目模板中分離出子模板,我們會使用template/items.ejs中的內容來呈現每一個資料:

<% for( var i = 0; i < this.length; i++){ %>  <li>    <%= $.View("template/item.ejs", this[i]);    </li>< % } %>

在這個例子中this指向傳遞給模板的資料,在這個例子中this指向items數組,他會使用template/item.ejs呈現自己的每一條資料。

 

  延時

  使用ajax請求,然後使用模板呈現結果是相當普遍的作法,使用$.Model章節中的Task模板,我們可以用下面的方式展現task:

Task.findAll({}, function(tasks){  $('#tasks').html("views/tasks.ejs" , tasks )})

  $.View執行$.Deferred,允許使用非常強大的、簡潔的、高效能的文法。如果deferred在$.View的資料中或者在jQuery modifiers中,$.View會非同步載入模板,等到deferreds和模板完全載入完畢之後才會渲染模板。Model的方法findAllfindOnesave 或者 destroy 返回deferreds,我們可以把渲染的代碼寫到一行。

$('#tasks').html("views/tasks.ejs" , Task.findAll() )

可以使用多個deferreds: 

$('#app').html("views/app.ejs" , {  tasks: Task.findAll(),  users: User.findAll()})

 

  打包、預先載入和效能

  預設情況,$.View是同步載入模版的,這是因為它預計你已經完成了下面這些工作:

  • 把模版放在 script 標籤中;
  • JavaScript編譯的時候完成模版的打包;
  • 預先載入模版。

  JavaScriptMVC不推薦把模版放在script標籤中,因為在多個應用程式中這種方式不利於重用。他同樣不利於系統效能,除非你需要立即載入模版。JavaScriptMVC推薦把初始化時需要使用的模版和javascript打包在一起,其他模版在用的時候再載入。StealJS, JavaScriptMVC編譯系統可以處理和打包模版,把壓縮後的檔案添加到最終產品中,使用steal.views(PATH, ...)指向你需要的模版。

steal.views('tasks.ejs','task.ejs');

  然後,當$.View查詢模版的時候,他會使用一個緩衝的版本,以避免額外的ajax請求。對於那些不需要立即使用的模版,可以使用jQuery.get預先載入和緩衝他們,只需要簡單的提供一個url和視圖的資料類型。最好在初始化頁面之後執行這個操作。

$(window).load(function(){  setTimeout(function(){    $.get('users.ejs',function(){},'view');    $.get('user.ejs',function(){},'view');  },500)})

 

 

javascriptMVC教程目錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.