淘汰javascript foreach绑定

mat*_*att 3 javascript knockout.js

我正在尝试允许用户创建一个转换并向此转换对象添加一个类别数组.我试图使用knockout的foreach绑定到类别数组,并让用户向转换添加新类别.我已经创建了一个jsfiddle来说明我在这里要解释的内容.
http://jsfiddle.net/msell/ueNg7/16/

当用户修改转换时,JSON对象会正确构建,但我无法获得要显示的转换列表.

Dom*_*nic 10

你有几个问题:

您正在使用Knockout 1.2.1

foreach结合中不添加直到淘汰赛2.0.

你没有使用 observableArray

您需要将categories属性修改为a ko.observableArray(),而不仅仅是一个空数组.否则Knockout将无法观察到你的push时间,并且该remove方法将不存在.

你的this绑定是错误的.

从事件处理程序调用时,this将被错误地设置.您可以通过各种方式解决此问题,在Knockout文档中详细讨论,但一个简单的解决方法是将引用更改为viewModel而不是this.


要解决所有这些问题,您应升级到Knockout 2.0,并将视图模型声明更改为

var viewModel = {
    name: ko.observable(''),
    description: ko.observable(''),
    categories: ko.observableArray(),
    categoryToAdd: ko.observable(''),

    removeCategory: function(category) {
        viewModel.categories.remove(category);
    },

    addCategory: function() {
        viewModel.categories.push(new Category(viewModel.categoryToAdd()));
        viewModel.categoryToAdd('');
    }
};
Run Code Online (Sandbox Code Playgroud)

这是一个更正的JSFiddle:http://jsfiddle.net/ueNg7/19/