繁体   English   中英

Knockout.js 语法

[英]Knockout.js syntax

我是 Javascript MVC 框架 Knockout.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); };    
};

你能解释一下这些语句的作用吗(特别是 $data, $root)? 还有什么语句self.chosenFolderId(folder); 做 ?

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

在这种情况下,$data 是数组的当前项(如文件夹 [i]),$root 是父元素。 对你来说,文件夹是你的 ViewModel 的一个字段: $data = 迭代中的当前文件夹 (viewModel.folder[i]) $root = viewModel

self.chosendFolderId(folder) 执行您的 viewModel selectedFolderId 方法。 代码使用 self 来保留 viewModel 值,因为在函数中关键字“this”不是 viewModel 而是方法的发送者。 这是一个关闭。

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

viewModel {
  topObjects : ko.observableArray()
}

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

如果我们在 viewModel.topObjects.Objects 上创建一个 foreach,$parent 是 topObjects,$root 是 viewModel。

谢谢 Tjorriemorrie ;-)

回答关于self.chosenFolderId(folder)

它将值写入chosenFolderId observable。 参数“ folder ”的值实际上是$data.当前值$data.

如果您尝试在提供的代码中将引用从self更改为this (这是同一件事),则选择 css 不起作用。 有人知道为什么吗?

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

关于你的问题:

语句做什么(特别是$data$root )?

$data :代表当前视图模型。 它在foreach循环中很有用。 例如-如果我们有学生的集合并且我们正在迭代这个集合, $data给我们当前的学生实例。 这样我们就可以使用$data来获取学生对象的各种属性,如nameclass

$root :这是根视图模型,层次结构中的最高上下文。 因此,通过$root ,您可以访问顶级属性。

如果仍遇到$ root,$ data,$ parent,$ parentContext,$ rawData的困难。 我建议您在Google chrome上使用敲除上下文调试器扩展。

https://chrome.google.com/webstore/detail/knockoutjs-context-debugg/oddcpmchholgcjgjdnfjmildmlielhof?hl=zh-CN

出于不知名的目的: https ://knockoutjs.com/documentation/binding-context.html

谢谢海森堡

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM