0

コレクションを選択マルチにバインドしています。コレクション内のいくつかの項目には「Selected」:「True」というプロパティがあります。これらを選択マルチの selectedOptions として設定したいと思います。ko.utils を使用することを考えました。 .arrayFilter を使用してこれらを除外し、selectedOptions として設定しますが、私の人生では、これを行うための最良の方法を見つけることができません。

誰でも助けることができます.ko.utils.arrayFilterがここに追加された以外のすべてを含むFiddlerページが設定されていますhttp://jsfiddle.net/dumbarse/TpnZh/3/

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

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

        var viewModel = {
            availableThings: ko.observableArray(initialThingsModel),
            selectedThings: ko.observableArray(),                
        };

        ko.applyBindings(viewModel);
4

1 に答える 1

2

ここko.utils.arrayFilterで使用する正しい方法は次のとおりです (詳細については、こちらを参照してください: Utility Functions in KnockoutJS ):

selectedThings: ko.utils.arrayFilter(initialThingsModel, 
    function(item) { return item.Selected == "True"; })

JSFiddle のデモ。

selectedThingsアイテムを追加/削除するときに変更が必要な場合は、次availableThingsのようにラップする必要がありko.utils.arrayFilterますko.computed

var viewModel = {
     availableThings: ko.observableArray(initialThingsModel),               
};
viewModel.selectedThings = ko.computed(function() { 
    return ko.utils.arrayFilter(viewModel.availableThings(), 
       function(item) { return item.Selected == "True";}) 
});

JSFiddle のデモ。

于 2013-04-13T18:19:20.890 に答える