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_skillが最初のオプションになります。

これが理にかなっていることを願っています。そうでない場合は、コメントを通じて明確化にお答えいただければ幸いです。

最終更新

私が使用した:

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 に答える