0

我正在使用 knockout-kendo.js 将 knockout.js 绑定到剑道网格。如果您绑定对象的第一级属性,那么它工作正常。这是一个示例 - http://jsfiddle.net/rniemeyer/jZtg5/

在上面的示例中,项目属性是在视图模型中定义的(即 ViewModel.Items)

但是,如果您使用对象的二级属性将其绑定到剑道网格,则它不起作用。这是绑定不起作用的示例 - http://jsfiddle.net/thakkar/QhF2W/3/

在这个例子中,items 属性没有直接在视图模型中定义。相反,它是视图模型中使用的对象的属性。(即 ViewModel.obj.Items)

var Item = function(id, name, type) {
    this.id = id;
    this.name = ko.observable(name);
    this.type = type;
};

var vm2 = function() {
    this.items = ko.observableArray([
        new Item(1, "one", "a"),
        new Item(2, "two", "b"),
        new Item(3, "three", "a")
    ]);

var ViewModel = function() {
    this.obj = ko.observable(new vm2())
};

ko.applyBindings(new ViewModel());
4

1 回答 1

3

这是一个更新的固定小提琴:

http://jsfiddle.net/DianaNassar/z439C/2/

基本上,你错过了一个花括号[你有一个控制台错误]。但最重要的是,如果您想深入了解两个级别,您必须像这样绑定网格:

kendoGrid: {data:obj().items(),scrollable: false,columns: [
                            { field: 'id', title: 'id', width: 150 },
                            { field: 'name', title: 'name' },
                            { field: 'type', title: 'type' }
                        ] } "

不是:

kendoGrid: {data:obj.items,scrollable: false,columns: [
                            { field: 'id', title: 'id', width: 150 },
                            { field: 'name', title: 'name' },
                            { field: 'type', title: 'type' }
                        ] } "

Knockout observables 是函数,通过将新值作为参数传递给函数来设置它们的值,并且通过不传递参数来读取它

我希望这有帮助。

于 2014-05-17T07:57:38.407 回答