等于ko.observable()的变量的默认值是多少?

What is the default value of variable equal to ko.observable()?

本文关键字:默认值 多少 变量 等于 observable ko      更新时间:2023-09-26

我刚刚开始学习KnockoutJS。这是webmail客户端文件夹导航的代码。在视图代码中,比较引用变量$data$root.chosenFolderId()是否指向相同的内存位置。但是我不明白$root.chosenFolderId()的初始值是多少?

参考

视图:

<!-- 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将是数组中的当前项。

获取chosenFolderId的值

调用goToFolder的click绑定将传递它所绑定的项作为参数,因此chosenFolderId的值将被设置为所单击的

  • 元素。

    例如:单击"Archive"元素将触发绑定到folders[1]的项目的单击事件,从而调用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中的原语(字符串,数字,布尔值)视为值而不是引用。