这是小提琴 http://jsfiddle.net/srinivasanvee/yYEwJ/2/
我有一个列表,其中包含类别,产品,数量作为列, 我可以选择从下拉列表中添加新类别(选择 - 添加新 - 选项), 想要从类别subscribe方法填充categoryList observableArray(因为新添加的值必须应用于网格的所有行), 不确定如何做到这一点,尝试使用$ root.categoryList.push(名称),但没有运气
或者我们是否有更好的方法来处理这种情况? 对此的帮助非常感谢,提前谢谢。
答案 0 :(得分:1)
$root
之类的变量仅在绑定中可用。
实现此功能的一种方法是将对根视图模型的引用传递给cartLine构造函数。
您的cartLine最终会看起来像:
var cartLine = function(data1, root) {
this.category = ko.observable(data1.category);
this.product = ko.observable(data1.product);
this.quantity = ko.observable(data1.quantity);
this.category.subscribe(function(newValue) {
if (newValue == "--Add New--") {
var name = prompt("Enter Table Name");
if (name == null) {
return false;
}
else {
root.categoryList.push(name);
}
}
});
};
然后,您只需要在创建新的cartLine时将this
作为视图模型中的第二个参数传递。此处示例:http://jsfiddle.net/rniemeyer/kzZSH/
否则,您可以按原样创建cartLine,并在获得对新行的引用后从viewModel订阅。