我试图通过研究现有的源代码并对它们进行小的改动来学习knockoutjs。 我在这里试图理解的源代码是RP Niemeyer的knockout-sortable.js的一个例子。
原始示例代码为here
我做了一些小变化here
此代码中的更改如下所示是添加属性" name"在表格中:
var Table = function(id, name, students) {
this.students = ko.observableArray(students);
this.students.id = id;
this.students.name=name;
};
数据连续变化:
var initialTables = [
new Table(1,"Table One", [
new Student(1, "Bobby", "male"),
new Student(2, "Ted", "male"),
new Student(3, "Jim", "male")
]),
new Table(2,"Table Two", [
new Student(4, "Michelle", "female"),
new Student(5, "Erin", "female"),
new Student(6, "Chase", "male")
]),
new Table(3,"Table Three", [
new Student(7, "Denise", "female"),
new Student(8, "Chip", "male"),
new Student(9, "Kylie", "female")
]),
new Table(4,"Table Four", [
new Student(10, "Cheryl", "female"),
new Student(11, "Doug", "male"),
new Student(12, "Connor", "male")
]),
new Table(5,"Table Five", [
new Student(13, "Cody", "male"),
new Student(14, "Farrah", "female"),
new Student(15, "Lyla", "female")
])
];
由于表格ID已从字符串"表五"在数字-5中,可以在结果窗格中查看连续的更改。
现在,我将html代码从<span data-bind="text: students.id"></span>
更改为<span data-bind="text: students.name"></span>
,如图所示here
现在我曾希望表名的变化会回到&#34;表五&#34;但它只显示一个字母“&#39;
如果有人能告诉我我做错了什么,我将不胜感激。
此外,我已添加<pre data-bind="text: ko.toJSON(tables,null,2)"></pre>
来查看可观察的表格。
它显示以下数据:
[
{
"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"
},
-----and so on-------
可以看出它只显示学生阵列..我需要做什么来添加表格属性&#39; id&#39;和&#39; name&#39;对此...
真心感谢任何帮助。
由于
答案 0 :(得分:2)
students
是observableArray
,这是一个函数。在许多浏览器中,函数的name
属性是只读的。如果你想直接向你的observableArray添加这样的属性,那么你会想要选择一个不同的名字(如上面评论中注意到的@xdumaine)。
答案 1 :(得分:1)
Knockout可观察数组具有.name
(因为它们实际上只是具有敲除额外功能的函数)属性,您不应该尝试使用或覆盖。尝试将该属性命名为其他内容,或者更好的是,不要将其附加到observableArray,并将其附加到表本身:
var Table = function(id, name, students) {
this.students = ko.observableArray(students);
this.students.id = id;
this.name = ko.observable(name);
};