4

私は使用knockoutjsしていますが、私はそれに慣れていません。ドロップダウンリストの選択値に基づいてモデルデータを変更したい。私のAppModelでは、変更したい配列を購読しています。しかし、それは機能していませんか?これが私のコードです:

var filteredStocks  = [];
function viewModel(model) {
        this.isGeneral = ko.observable(model.generalStockEnabled);
        this.stocks = ko.observable();;
        if (model.generalStockEnabled === true)
        {
            filteredStocks = $.grep(model.stocks, function (v) {
                return v.sourceID === -1;
            });
        }
        else
        {
            filteredStocks = $.grep(model.stocks, function (v) {
                return v.sourceID !== -1;
            });
        }
        // If drop downlist changed
        var dropDownListSelectedValue = $('#enableGeneratInventorydl :selected').val();
        this.stocks.subscribe(function () {
            if (dropDownListSelectedValue === "True") {
                filteredStocks = $.grep(model.stocks, function (v) {
                    return v.sourceID === -1;
                });
                this.stocks(filteredStocks)
                this.isGeneral(true);
            }
            else
            {
                filteredStocks = $.grep(model.stocks, function (v) {
                    return v.sourceID !== -1;
                });
                this.stocks(filteredStocks)
                this.isGeneral(false);
            }
        }, this);

        this.stocks = ko.observableArray(filteredStocks);

ドロップダウンリストの値を変更したとき。株の価値は変わらない?

どんな助けでも大歓迎です。

4

1 に答える 1

10

stocks変数を別のオブザーバブルに再割り当てしているため、問題が発生します。したがって、最初に次のことを行います。

this.stocks = ko.observable();

そして、このオブザーバブルを購読します。しかし、後で次のようにします。

this.stocks = ko.observableArray(filteredStocks);

これstocksは、別のオブザーバブルに関連付けられます。サブスクリプションは、最初の割り当てからのものである元のオブザーバブルに対するものになります。短い例については、このフィドルを参照してください: http://jsfiddle.net/9nGQ9/2/

解決策は交換することですthis.stocks = ko.observable();

this.stocks = ko.observableArray();

そして交換this.stocks = ko.observableArray(filteredStocks);

this.stocks(filteredStocks);

于 2013-11-10T09:44:31.707 に答える