jsFiddle:http: //jsfiddle.net/wenbert/W2qLz/2/
即使我已经为selected_skill
数组提供了“初始数据”,它也$data
成为选择框中的第一项。
var initialData = [
{
id: '1',
name: "Batman",
isDelete: false,
selected_skill: { <--- This part right here.
id: '2',
name: "Boxing",
isDeleted: false
},
skills: [
{
id: '1',
name: "Karate",
isDeleted: false},
{
id: '2',
name: "Boxing",
isDeleted: false
},
{
id: '6',
name: "Sonar",
isDeleted: false}
]},
{
id: '2',
name: "Hulk",
isDelete: false,
skills: [
{
id: '3',
name: "MMA",
isDeleted: false},
{
id: '4',
name: "Rage",
isDeleted: false},
{
id: '5',
name: "Extra Strength",
isDeleted: false}
]},
];
请参阅$data
下面屏幕截图中的部分
我已经initial_data
提供了,但是当所有内容都“加载”时,$data 会根据选择框的第一个选项自动更新。
如何以这种方式设置“选定选项”?
在屏幕截图中,selected_skill
应该是:
selected_skill: {
id: '2',
name: "Boxing",
isDeleted: false
}
jsFiddle:http: //jsfiddle.net/wenbert/W2qLz/2/
更新:
在initialData
我的真实应用程序中使用$.getJSON()
. 我这样做是这样的:
$.getJSON(appUrl+"/getstuff/hero.json",
function(data){
ko.applyBindings(new Hero(data));
}
);
我可以看到 Firebug 控制台的结果显示它是“装箱” - 我得到Object { id="2", nameL: "Boxing", isDelete: false }
. 但是当一切都被渲染后,selected_skill
is 成为第一个选项。
我希望这是有道理的。如果没有,我很乐意通过评论回答澄清。
最后更新
我用了:
return item.id() === data.selected_skill.id
代替
return data.selected_skill && skill.id === data.selected_skill.id;
然后它起作用了。
我已经标记了正确的答案。