knockout binding - 使用javascript对象但不使用json对象

时间:2015-02-05 05:06:14

标签: knockout.js

我正在尝试通过研究现有的源代码并对它们进行小的更改来学习knockoutjs。我在这里想要理解的源代码是RP Niemeyer的knockout-sortable.js的一个例子。

原始示例代码为here

目的是能够从json字符串或jtoken对象中的服务器获取数据并在代码中使用它。

我对它进行了一些小改动并做了一个console.log来获取json here

var initialTables = [
        new Table("Table One",  [
            new Student(1, "Bobby", "male"),
            new Student(2, "Ted", "male"),
            new Student(3, "Jim", "male")
        ]),
        new Table("Table Two", [
            new Student(4, "Michelle", "female"),
            new Student(5, "Erin", "female"),
            new Student(6, "Chase", "male")
        ]),
        new Table("Table Three", [
            new Student(7, "Denise", "female"),
            new Student(8, "Chip", "male"),
            new Student(9, "Kylie", "female")
        ]),
        new Table("Table Four", [
            new Student(10, "Cheryl", "female"),
            new Student(11, "Doug", "male"),
            new Student(12, "Connor", "male")
        ]),
        new Table("Table Five", [
            new Student(13, "Cody", "male"),
            new Student(14, "Farrah", "female"),
            new Student(15, "Lyla", "female")
        ])
    ];

this.tables = ko.observableArray(initialTables);

使用console.log(ko.toJSON(this.tables))将initialTables对象转换为json,可以在console.log中看到,如下所示。

[{"students":[{"id":1,"name":"Bobby","gender":"male"},{"id":2,"name":"Ted","gender":"male"},{"id":3,"name":"Jim","gender":"male"}]},{"students":[{"id":4,"name":"Michelle","gender":"female"},{"id":5,"name":"Erin","gender":"female"},{"id":6,"name":"Chase","gender":"male"}]},{"students":[{"id":7,"name":"Denise","gender":"female"},{"id":8,"name":"Chip","gender":"male"},{"id":9,"name":"Kylie","gender":"female"}]},{"students":[{"id":10,"name":"Cheryl","gender":"female"},{"id":11,"name":"Doug","gender":"male"},{"id":12,"name":"Connor","gender":"male"}]},{"students":[{"id":13,"name":"Cody","gender":"male"},{"id":14,"name":"Farrah","gender":"female"},{"id":15,"name":"Lyla","gender":"female"}]}]

现在我将initialTables更改为我之前重新编写的json对象并调用表格,如下所示here

this.tables = ko.observableArray(ko.mapping.fromJS(initialTables));

现在,即使我没有看到任何错误,我也看不到结果窗格中反映的initialTables对象。

我做错了什么?

真诚感谢所有帮助。

由于

1 个答案:

答案 0 :(得分:1)

arnab你缺少大括号(),这应该是你的工作。

请在此行进行修改

ko.observableArray(ko.mapping.fromJS(initialTables))

类似

ko.observableArray(ko.mapping.fromJS(initialTables)()) 

对于可观察的数组,您需要传递Array。如果最后给出(),则会得到一个数组(展开内容)。

工作小提琴 here