2012-03-09 36 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); };