Knockout JS - 需要从详细信息对象填充可观察数组

时间:2012-03-02 00:35:48

标签: knockout.js knockout-mapping-plugin

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

我有一个列表,其中包含类别,产品,数量作为列, 我可以选择从下拉列表中添加新类别(选择 - 添加新 - 选项), 想要从类别subscribe方法填充categoryList observableArray(因为新添加的值必须应用于网格的所有行), 不确定如何做到这一点,尝试使用$ root.categoryList.push(名称),但没有运气

或者我们是否有更好的方法来处理这种情况? 对此的帮助非常感谢,提前谢谢。

1 个答案:

答案 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订阅。