首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Knockout.js语法

Knockout.js语法
EN

Stack Overflow用户
提问于 2012-03-09 10:47:57
回答 4查看 3.5K关注 0票数 2

我是Javascript框架Knockout.js的初学者。

来自于传统的Javascript (和一些jQuery经验),我在理解语法学习Knockout.js方面遇到了困难。

考虑下面的情况;

The View:

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

视图模型:

代码语言:javascript
复制
function WebmailViewModel() {
    // Data
    var self = this;
    self.folders = ['Inbox', 'Archive', 'Sent', 'Spam'];
    self.chosenFolderId = ko.observable();

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

请你解释一下这些声明是做什么的(特别是$data,$root)。另外,self.chosenFolderId(folder);语句是做什么的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-09 11:01:11

$data和$root关键字通常由KO使用。当您在数组(数据绑定)上使用foreach时,KO为数组中的每个元素创建一个<li>

在本例中,$data是数组的当前项(如foldersi),$root是父元素。对于您来说,文件夹是ViewModel的一个字段:$data =当前的迭代文件夹(viewModel.folderi) $root = viewModel

Self.chosendFolderId(文件夹)执行viewModel chosenFolderId方法。代码使用self来保留viewModel值,因为在函数中,关键字"this“不是viewModel,而是方法的发件人。这是个了结。

编辑:$parent关键字是树的前级。$root关键字是顶级树的级别。

代码语言:javascript
复制
viewModel {
  topObjects : ko.observableArray()
}

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

如果我们在viewModel.topObjects.Objects上创建一个前景,那么$parent就是topObjects,$root是viewModel。

谢谢你;-)

票数 11
EN

Stack Overflow用户

发布于 2012-09-27 20:46:03

回答你关于self.chosenFolderId(folder)的问题

它将值写入可观察的chosenFolderId。参数"folder“的值实际上是$data.的当前值。

票数 1
EN

Stack Overflow用户

发布于 2014-05-20 19:10:45

如果您试图在提供的代码中将引用从self更改为此(这是相同的事情),那么选择css就无法工作。有人知道为什么吗?

代码语言:javascript
复制
this.goToFolder = function(folder) { this.chosenFolderId(folder); };   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9632767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档