2012-03-09 48 views
1

我是一個初學者給Javascript MVC框架Knockout.jsKnockout.js語法

從傳統的Javascript(和一些jQuery的經驗)的到來,我有理解語法學習困難Knockout.js

考慮下面的陳述;

的觀點:

<ul class="folders" data-bind="foreach: folders"> 
<li data-bind="text: $data, 
       css: { selected: $data == $root.chosenFolderId() }, 
       click: $root.goToFolder"></li></ul> 

視圖模型:

function WebmailViewModel() { 
    // Data 
    var self = this; 
    self.folders = ['Inbox', 'Archive', 'Sent', 'Spam']; 
    self.chosenFolderId = ko.observable(); 

    // Behaviours  
    self.goToFolder = function(folder) { self.chosenFolderId(folder); };  
}; 

能否請你解釋一下我是什麼做的語句(具體數據$,$根)? 另外聲明self.chosenFolderId(folder);做什麼?

回答

10

KO通常使用$ data和$ root關鍵字。 當您使用數組(數據綁定)的foreach時,KO爲數組中的每個元素創建一個<li>

在這種情況下,$ data是數組的當前項目(如folders [i]),$ root是父元素。 對於你,文件夾是您的視圖模型的字段:在迭代 $數據=當前文件夾(viewModel.folder [I]) $根=視圖模型

self.chosendFolderId(文件夾)執行你的ViewModel chosenFolderId方法。該代碼使用self來保留viewModel值,因爲在該函數中,關鍵字「this」不是viewModel,而是方法的發件人。這是一個關閉。

編輯: $父關鍵字是樹的previus級別。 $根關鍵字是頂級樹的級別。

viewModel { 
    topObjects : ko.observableArray() 
} 

viewModel.topObjects.push({ 
    Objects : ko.observableArray() 
}); 

如果我們創建viewModel.topObjects.Objects一個foreach中,$父topObjects,$根視圖模型。

感謝Tjorriemorrie ;-)

+1

不是$父母,$ root是根? – Tjorriemorrie 2012-03-15 04:23:21

+0

我改正了我的帖子。非常感謝。 – Cedric 2012-03-22 10:39:44

1

回答你的問題有關self.chosenFolderId(folder)

它寫入值chosenFolderId觀察到。參數的值「folder」是$data.

0

實際電流值。如果你試試這個(這是一回事)中所提供的代碼,然後選擇CSS不從自我更改爲參考工作。有人知道爲什麼嗎?

this.goToFolder = function(folder) { this.chosenFolderId(folder); };