1

モデルにバインドする選択マルチがあり、2 番目のモデルを使用して以前に選択した値を選択したいと考えています。これは単純で簡単なことだと思っていましたが、ノックアウトでは、必要以上に難しいようです. これが私がこれまでに持っているものです。フィドラー

セレクトマルチ

<select data-bind="options:availableThings,optionsText: 'Title', selectedOptions: selectedThings" size="5"  multiple="true"></select>

私のモデル

 var initialThingsModel = [
            {"Id":1,"Title":"First"},
            {"Id":2,"Title":"Next"},
            {"Id":3,"Title":"Another"},
            {"Id":4,"Title":"Last"}
        ];
        var initialSelectedThingsModel = [   
            {"Id":2,"Title":"Next"},
            {"Id":4,"Title":"Last"}
        ];

次に、最初のモデルをバインドする残りの部分と、選択した値を保存して送信する配管です。

var viewModel = {
            availableThings: ko.observableArray(initialThingsModel),
            selectedThings: ko.observableArray(initialSelectedThingsModel),
            save: function () {                  
                $.ajax({
                    url: '/home',
                    type: 'POST',
                    data: ko.toJSON(this.selectedThings),
                    dataType: "json",
                    contentType: "application/json;  charset=utf-8",
                    success: function (data) {
                        alert(data.Message);
                    }
                });
            }
        };

        ko.applyBindings(viewModel);

私が直面する問題は、initialSelectedThingsModel をバインドして、選択したアイテムが選択リストに事前に入力されるようにすることです。

幅広い質問がありますが、ノックアウトは正しい解決策ですか、それともバックボーンはこの種のことを達成するためのより簡単な方法を提供しますか?

4

1 に答える 1

1

あなたのバインディングは正しいです。問題は、 として渡しているオブジェクトが にselectedThings存在しないことavailableThingsです。次のように、同じオブジェクトを渡す必要があります。

    var initialSelectedThingsModel = [   
        initialThingsModel[0],
        initialThingsModel[3]
    ];

バックボーンのほうが良いかどうかを判断するのに十分な経験はありませんが、あなたの Knockout コードはかなり簡潔に思えます。どれだけ簡単にできるかわかりません。

于 2013-04-13T05:40:26.587 に答える