2

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_skillis 成为第一个选项。

我希望这是有道理的。如果没有,我很乐意通过评论回答澄清。

最后更新

我用了:

return item.id() === data.selected_skill.id 

代替

return data.selected_skill && skill.id === data.selected_skill.id; 

然后它起作用了。

我已经标记了正确的答案。

4

1 回答 1

1

问题是该selected_skill对象是与技能数组中的对象不同的对象,而不是对同一对象的引用。

在 JavaScript 中,

var a = { name: "Bob" };
var b = { name: "Bob" };
var c = a;

alert(a === b);  //false - different objects
alert(a === c);  //true - reference to the same object

您需要运行一些逻辑来将所选对象与列表中的对象匹配。也许是这样的:http: //jsfiddle.net/rniemeyer/W2qLz/3/

于 2012-11-12T03:54:40.087 回答