0

这是小提琴 http://jsfiddle.net/srinivasanvee/yYEwJ/2/

我有一个列表,其中包含类别、产品、数量作为列,我可以选择从下拉列表本身添加新类别(选择 --Add new-- 选项),想要从类别订阅方法填充 categoryList observableArray(因为新添加的值必须应用于网格的所有行),不知道该怎么做,尝试使用 $root.categoryList.push(name),但没有运气

还是我们有更好的方法来处理这种情况?对此的帮助真的很感激,在此先感谢。

4

1 回答 1

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);
            }
        }
    });
};

然后,您只需this在创建新的 cartLine 时作为视图模型的第二个参数传入。示例:http: //jsfiddle.net/rniemeyer/kzZSH/

否则,您可以照原样创建您的 cartLine,并在获得对新行的引用后从您的 viewModel 订阅。

于 2012-03-02T01:37:36.123 回答