2012-10-04 41 views
1

我通過教程從官方網站去:Knockoutjs CSS,函數調用

Knockout single page application lesson

本所認爲:

<!-- Folders --> 
<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); };  
}; 

ko.applyBindings(new WebmailViewModel()); 

我不明白2件事:

  1. 'click:'事件正在調用javascript函數goToFolder,但是,沒有參數,它如何知道點擊哪個文件夾來設置chosenFolderId?如果我錯了,行css:{selected:$ data == $ root.chosenFolderId()}表示當前選中的對象$ data是否等於chosenFolderId(),因此css與選擇的名稱是否啓用?

乾杯所有

回答

2

以下解答:

  1. 默認情況下,淘汰賽傳遞當前上下文被調用的函數。在你的情況下,這是$data對象,其中包含下列字符串中的一個'收件箱','存檔','已發送','垃圾郵件'。

  2. 是的,你是對的。這意味着css類將應用於<li>元素,其中$ data等於chosenFolderId屬性的視圖模型。

+0

嗨阿爾喬姆,非常感謝,我更好地理解爲什麼調用函數時不帶參數,關於語法,爲什麼CSS:被稱爲與chosenFolderId結束的()(),然後點擊? :沒有? – dtjmsy

+0

因爲在綁定中有一個表達式(即「visible:Something()> 10」)時應該使用括號,所以如果您只是函數或可觀察的元素,則不需要放置括號。這篇文章可以幫助你理解基本的東西:http://www.knockmeout.net/2011/06/10-things-to-know-about-knockoutjs-on.html –

+0

非常感謝你的幫助阿爾喬姆 – dtjmsy