Knockout.js语法

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

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

考虑下面的陈述;

风景:

查看型号:

 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使用。 当您在数组(data-bind)上使用foreach时,KO会为数组中的每个元素创建一个

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

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

    编辑:$父关键字是树的普通级别。 $ 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 :表示当前的viewmodel。 它在foreach循环中很有用。 例如 – 如果我们有学生集合并且我们正在迭代这个集合, $data给我们当前的学生实例。 这样我们就可以使用$data来获取学生对象的各种属性,如nameclass

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