Javascript Knockout.js:选择下拉问题,始终设置;“选定项目”;对于第一个选项,即使使用;“初始数据”;
jsFiddle: 尽管我已经为Javascript Knockout.js:选择下拉问题,始终设置;“选定项目”;对于第一个选项,即使使用;“初始数据”;,javascript,knockout.js,Javascript,Knockout.js,jsFiddle: 尽管我已经为所选技能数组提供了“初始数据”,但$data将成为选择框中的第一项 var initialData = [ { id: '1', name: "Batman", isDelete: false, selected_skill: { <--- This part right here. id: '2', name: "Boxing", isDele
所选技能
数组提供了“初始数据”,但$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}
]},
];
jsFiddle:
更新:
我的real app中的初始数据是使用$.getJSON()
加载的。我是这样做的:
$.getJSON(appUrl+"/getstuff/hero.json",
function(data){
ko.applyBindings(new Hero(data));
}
);
我可以看到Firebug控制台的结果是“装箱”——我得到Object{id=“2”,nameL:“装箱”,isDelete:false}
。但是当所有的东西都被渲染后,selected\u skill
将成为第一个选项
我希望这是有意义的。如果没有,我很乐意通过评论回答澄清
最终更新
我用过:
return item.id() === data.selected_skill.id
而不是
return data.selected_skill && skill.id === data.selected_skill.id;
然后它成功了
我已标记了正确答案。问题在于所选的\u skill
对象与skills数组中的对象不同,而不是对同一对象的引用
在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
您需要运行一些逻辑来将所选对象与列表中的对象相匹配。可能是这样的:如果您在firebug/chrome开发控制台中查看生成的HTML,似乎option元素的值根本没有被赋值。因此,所选的_技能没有匹配的价值。也许你可以从那里开始,我不知道这是什么意思。但是,即使您单击“灰色框”,然后单击“设置为默认值”,并查看开发控制台中的检查器,您也无法看到html的更改-但是选择框的值已更新。RP Niemeyer,非常感谢JS对象的解释。这绝对是我想要的。但是在我的应用程序中,我通过$.getJSON()
获取初始数据-我有新的逻辑来匹配列表中选定的对象,但我仍然得到第一个选项。仅供参考,JSON结果具有“装箱”功能,但在呈现数据时,它将“默认”为第一个选项。你的想法?rp niemeyer,我用我使用的return item.id()==data.selected\u skill.id
更新了我的问题return data.selected\u skill&&skill.id==data.selected\u skill.id代码>然后它工作了。
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