0

モデルを持っている場合

function SearchModel() {
        this.SearchCriteria = "";        
    }

そして私のコード内には:

model.SearchCriteria = data;

ko.applyBindings(model);

そして私のhtmlで:

 <select id="vehiclesMake" data-bind="options: SearchCriteria.Tool.VehicleMakes, optionsText: 'Description', value: SearchCriteria.Tool.SelectedModel, optionsCaption: 'Choose...'"></select>     

これらはすべて正常に機能します。ドロップダウンが期待どおりに表示されます。

今私が抱えている問題は、次を追加するときです。

$('#vehiclesMake').change(function () {            
      loadSearchTool();                            
  });

loadSearchTool()が行う場所:

loadSearchTool = function () {
        var postCode = $('#postcode').val();
        var distance = $('#distance').val();
        var make = $('#vehiclesMake').val();
        var makemodel = $('#makemodel').val();
        var minPrice = $('#minPrice').val();
        var maxPrice = $('#maxPrice').val();

        data.getQuickSearch(postCode, distance, make, makemodel, minPrice, maxPrice, function (data) {
            //our success function                
            console.log(data.Result);           
            if (data.Result == 'Fail') {
                console.log('Fail');//TO DO
            }
            else {
                model.SearchCriteria = data;

                ko.applyBindings(model);
            }

        }, function () {            
            console.log('error');//TO DO
        });
    };

上記のすべてのコードで、loadsearchtool(pageloadでも呼び出されます)がドロップダウンにバインドされると、.change()コードが実行され、無限ループに陥ります。

どうすればこれを回避できますか?これはknockoutjsでの私の最初のクラックなので、少し初心者です。

4

1 に答える 1

1

ko.applyBindings(model);外に移動するだけですloadSearchTool()。ko.applyBindings は、($(document).ready()たとえばから) 1 回だけ呼び出す必要があります。

おそらく、 SearchCriteria をオブザーバブルに変更することもできます。

this.SearchCriteria = ko.observable("");

データを更新するには:

model.SearchCriteria(data);
于 2013-01-09T11:13:27.520 に答える