为什么foreach数据绑定没有创建$ parent上下文?

时间:2015-06-25 16:59:58

标签: knockout.js

在以下代码中,为什么remove处理程序可以在没有$parent的情况下访问?

如果我使用data-bind="click: $parent.remove"我收到错误消息property remove of undefined doesn't exists,但是在foreach循环中,我不应该得到$parent上下文吗?

模板:

<ul data-bind="foreach:list">
    <li><!-- ko text: $data --><!-- /ko --> <button data-bind="click: remove">x</button></li>
</ul>

视图模型:

function ViewModel() {

    var self = this;

    this.list = ko.observableArray(['asd', 'lol', 'rofl']);

    this.remove = function(index){
        console.log('Clicked ' + index);
        self.list.splice(index, 1);
    };

};

ko.applyBindings(ViewModel);

https://jsfiddle.net/3d7nfbr3/3/

1 个答案:

答案 0 :(得分:3)

创建视图模型时,您缺少new

您的代码应如下所示:

ko.applyBindings(new ViewModel());

如果没有new this引用全局window对象,那么您的remove函数将全局声明,这就是$parent无效的原因

演示JsFiddle