敲除绑定 - 使用 'id' 但不使用 'name'
knockout binding - working with 'id' but not with 'name'
我正在尝试通过研究现有的源代码并对它们进行小的改动来学习 knockoutjs。
我在这里试图理解的源代码是 RP Niemeyer 的淘汰赛示例-sortable.js。
原示例代码为here
我做了一些小改动 here
如下所示,这段代码的变化是在table中添加了一个属性 "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")
])
];
由于table id从字符串"Table Five"变为数字-5,结果面板可以看到连续变化..
现在,我将 html 代码从 <span data-bind="text: students.id"></span>
更改为 <span data-bind="text: students.name"></span>
,如图 here
现在我希望 table 名称中的更改会恢复到 "Table Five" 但它只显示一个字母表 'd'
如果有人能告诉我我做错了什么,我将不胜感激..
我还添加了 <pre data-bind="text: ko.toJSON(tables,null,2)"></pre>
以查看 tables observable。
它显示以下数据:
[
{
"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-------
可以看出它只显示学生数组。我需要做什么才能将 tables 属性- 'id' 和 'name' 添加到此..
真诚感谢任何帮助..
谢谢
students
在这种情况下是一个 observableArray
,它是一个函数。在许多浏览器中,函数的 name
属性 是只读的。如果您想将这样的 属性 直接添加到您的 observableArray,那么您需要选择一个不同的名称(正如@xdumaine 在上面的评论中注意到的那样)。
Knockout 可观察数组有一个 .name
(因为它们实际上只是一个带有 knockout 附加功能的函数)属性,您不应尝试使用或覆盖它。尝试将 属性 命名为其他名称,或者更好的是,不要将其附加到 observableArray,而是将其附加到 table 本身:
var Table = function(id, name, students) {
this.students = ko.observableArray(students);
this.students.id = id;
this.name = ko.observable(name);
};
我正在尝试通过研究现有的源代码并对它们进行小的改动来学习 knockoutjs。 我在这里试图理解的源代码是 RP Niemeyer 的淘汰赛示例-sortable.js。
原示例代码为here
我做了一些小改动 here
如下所示,这段代码的变化是在table中添加了一个属性 "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")
])
];
由于table id从字符串"Table Five"变为数字-5,结果面板可以看到连续变化..
现在,我将 html 代码从 <span data-bind="text: students.id"></span>
更改为 <span data-bind="text: students.name"></span>
,如图 here
现在我希望 table 名称中的更改会恢复到 "Table Five" 但它只显示一个字母表 'd'
如果有人能告诉我我做错了什么,我将不胜感激..
我还添加了 <pre data-bind="text: ko.toJSON(tables,null,2)"></pre>
以查看 tables observable。
它显示以下数据:
[
{
"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-------
可以看出它只显示学生数组。我需要做什么才能将 tables 属性- 'id' 和 'name' 添加到此..
真诚感谢任何帮助..
谢谢
students
在这种情况下是一个 observableArray
,它是一个函数。在许多浏览器中,函数的 name
属性 是只读的。如果您想将这样的 属性 直接添加到您的 observableArray,那么您需要选择一个不同的名称(正如@xdumaine 在上面的评论中注意到的那样)。
Knockout 可观察数组有一个 .name
(因为它们实际上只是一个带有 knockout 附加功能的函数)属性,您不应尝试使用或覆盖它。尝试将 属性 命名为其他名称,或者更好的是,不要将其附加到 observableArray,而是将其附加到 table 本身:
var Table = function(id, name, students) {
this.students = ko.observableArray(students);
this.students.id = id;
this.name = ko.observable(name);
};