我试图让用户创建一个铸件,并添加类的数组此铸造对象。 我试图用基因敲除的的foreach结合类别的阵列,并允许用户添加新的类别来铸造。 我创建了一个的jsfiddle来说明什么,我想在这里解释。
http://jsfiddle.net/msell/ueNg7/16/
JSON对象获取正确的用户修改铸造建起来了,但我不能完全得到铸件的列表中显示。
我试图让用户创建一个铸件,并添加类的数组此铸造对象。 我试图用基因敲除的的foreach结合类别的阵列,并允许用户添加新的类别来铸造。 我创建了一个的jsfiddle来说明什么,我想在这里解释。
http://jsfiddle.net/msell/ueNg7/16/
JSON对象获取正确的用户修改铸造建起来了,但我不能完全得到铸件的列表中显示。
你有几个问题:
所述foreach
结合被未加入,直至淘汰赛2.0。
observableArray
您需要修改您的categories
属性是ko.observableArray()
而不只是一个空数组。 否则淘汰赛将不能够当你观察push
给它,并remove
方法将不存在。
this
结合是错误的。 当从事件处理程序调用, this
将设置不正确。 您可以通过多种方式,解决这个问题在淘汰赛文档中详细讨论 ,但一个简单的解决方法是改变引用viewModel
,而不是到this
。
要解决所有这些,你应该升级到淘汰赛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('');
}
};
这里是一个修正的jsfiddle: http://jsfiddle.net/ueNg7/19/
您需要使用ko.observableArray你数组当你改变你的阵列,并不会更新,否则淘汰赛不会知道,也应该使用模板来代替,读到这里http://knockoutjs.com/documentation/template-binding.html#note_2_using_the_foreach_option_with_a_named_template
var viewModel = {
name: ko.observable(''),
description: ko.observable(''),
categories: ko.observableArray([]),
categoryToAdd: ko.observable(''),
removeCategory: function(category) {
this.categories.remove(category);
},
addCategory: function() {
this.categories.push(new Category(this.categoryToAdd()));
this.categoryToAdd('');
}
};