Knockout.js knockoutjscss,函数调用

Knockout.js knockoutjscss,函数调用,knockout.js,Knockout.js,我正在浏览官方网站上的教程: 这是一种观点: <!-- Folders --> <ul class="folders" data-bind="foreach: folders"> <li data-bind="text: $data, css: { selected: $data == $root.chosenFolderId() }, click: $root.goToFold

我正在浏览官方网站上的教程:

这是一种观点:

<!-- Folders -->
<ul class="folders" data-bind="foreach: folders">
    <li data-bind="text: $data, 
                   css: { selected: $data == $root.chosenFolderId() },
                   click: $root.goToFolder"></li>
</ul>
我不明白两件事:

  • “click:”事件正在调用javascript函数goToFolder,但是,如果没有参数,它如何知道单击哪个文件夹来设置chosenFolderId

  • 如果我错了,请纠正我,css:{selected:$data==$root.chosenFolderId()}行表示如果当前选定对象$data等于chosenFolderId(),则启用具有选定名称的css

  • 大家干杯这里是答案:

  • 默认情况下,knockout将当前上下文传递给被调用的函数。在您的例子中,这是
    $data
    对象,它包含以下字符串之一“收件箱”、“存档”、“已发送”、“垃圾邮件”

  • 是的,你说得对。这意味着所选的
    css类将应用于
  • 元素,其中$
    数据
    等于视图模型的
    chosenFolderId
    属性


  • 嗨,Artem,非常感谢,我更好地理解了为什么在没有参数的情况下调用函数,关于语法,为什么使用chosenFolderId()结尾的()调用css:,并单击:without?,因为在绑定中有表达式时应该使用方括号(即“visible:Something()>10”),如果你有一个函数或可观测的,你不需要放括号。这篇文章帮助你理解一些基本的东西:非常感谢你的帮助
    function WebmailViewModel() {
        // Data
        var self = this;
        self.folders = ['Inbox', 'Archive', 'Sent', 'Spam'];
        self.chosenFolderId = ko.observable();
    
        // Behaviours    
        self.goToFolder = function(folder) { self.chosenFolderId(folder); };    
    };
    
    ko.applyBindings(new WebmailViewModel());