我刚刚开始学习KnockoutJS。这是用于Webmail客户端的文件夹导航的代码。在查看代码中,比较参考变量$data
和$root.chosenFolderId()
是否指向相同的存储位置。但是我不明白$root.chosenFolderId()
的初始值是多少?
Reference
视图:
<!-- 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();
//Operations
self.goToFolder = function(folder){
self.chosenFolderId(folder);
};
};
ko.applyBindings(new WebmailViewModel());
最佳答案
您在那里90%。如您所述,foreach将遍历folders
数组,而$data
将成为数组中的当前项。
拾取selectedFolderId的值
调用goToFolder
的单击绑定将把绑定到的项作为参数传递,因此chosenFolderId
值将设置为与单击的
例如:单击“ Archive”元素将触发绑定到
folders[1]
的项目的click事件,从而使用goToFolder
值调用folders[1]
。初始值
$root.chosenFolderId()
的初始值将是undefined
,因为您没有参数声明了它。在初始视图中,如果您具有以下选项,则不会显示任何文件夹:self.folders = ['Inbox', 'Archive', 'Sent', 'Spam'];
self.chosenFolderId = ko.observable(self.folders[0]);
然后将首先选择“收件箱”。
记忆体位置
您询问
$data
和$root.chosenFolderId()
是否指向相同的存储位置。基本上是正确的-如果您的文件夹是一个对象数组,那么它们将包含相同的引用(用于所选项目)。从技术上讲,字符串也是JS中的引用(请参见说明https://stackoverflow.com/a/51193/625200),但是更容易将JS中的基元(字符串,数字,布尔值)视为值而不是引用。关于javascript - 等于ko.observable()的变量的默认值是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39941030/