1

こんにちは、ここの例に従って、計算された値を使用して、監視可能な配列のフィルター処理されたバージョンを作成しようとしていますhttp://knockoutjs.com/documentation/fn.html (一番下にあります)。

私が持っているhtmlについて

<select  width="50px" data-bind="options: $root.resources, optionsText: 'Name'"></select>
<select  width="50px" data-bind="options: $root.available, optionsText: 'Name'"></select>​

そして、私のビューモデルは次のようになります:

var viewModel = function() {
    var self = this;
    self.resources = ko.observableArray([{Name: "Anna",Available: true}, {Name: "Bert", Available: false}]);  

    self.getFilteredResources = function (isAvailable) {
        var all = self.resources(), results = [];
        var resource;
        for (resource in all){
            if (resource.Available() === isAvailable){
                results.push(resource);
            }
        }
        return results;
    };    
    //self.available = ko.computed(function() { self.getFilteredResources( true);}, this);    
};

ko.applyBindings(new viewModel());​

ここでコードを見ることもできますhttp://jsfiddle.net/patrickhastings/eCtFY/1/

目立つように、出力は、アンナとバートが入ったドロップダウン 1 つと空の 1 つですが、これは問題ありません。

2 番目のドロップダウンに Anna が入力されるのではなく、self.available を宣言する行のコメントを外すと、空のドロップダウンが 2 つ表示されます。助けてください、私がばかげているところを教えてください。

4

1 に答える 1

1

これにはいくつかの小さな問題があります。

あなたは電話をかけresource.Available()Availableいて、観察可能ではないので、チェックする必要がありますresource.Available === isAvailable

さらに、計算されたオブザーバブルのニーズはreturnself.getFilteredResources

そうfor resource in allすることで、リソース自体ではなくインデックスが提供されます。

私は次のようなものをお勧めします:http://jsfiddle.net/rniemeyer/jCYT7/

于 2012-04-28T13:08:26.277 に答える