变量的默认值是什么,等于ko.observable()?

时间:2016-10-09 07:19:21

标签: javascript jquery html css knockout.js

我刚开始学习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());

1 个答案:

答案 0 :(得分:1)

你90%在那里。正如您所说,foreach将遍历folders数组,$data将成为数组中的当前项。

拾取selectedFolderId的值

调用goToFolder的点击绑定会将绑定的项目作为参数传递,因此chosenFolderId值将设置为与所点击的&lt; li&gt;对应的文件夹项目。元件。

例如:点击&#39;存档&#39; element将触发绑定到folders[1]的项目的click事件,从而使用goToFolder值调用folders[1]

初始值

$root.chosenFolderId()的初始值将为undefined,因为您声明它没有参数。在初始视图中,如果您有:

,则不会选择任何文件夹
self.folders = ['Inbox', 'Archive', 'Sent', 'Spam'];
self.chosenFolderId = ko.observable(self.folders[0]);
然后是&#39;收件箱&#39;最初会被选中。

内存位置

您询问$data$root.chosenFolderId()是否指向相同的内存位置。这大多是正确的 - 如果您的文件夹是一个对象数组,那么它们将包含相同的引用(对于所选项)。技术上字符串也是JS中的引用(参见解释https://stackoverflow.com/a/51193/625200),但将JS中的原语(字符串,数字,布尔值)视为值而不是引用更简单。