Knockout js applybinding

时间:2012-11-27 14:54:39

标签: javascript knockout.js

在这里淘汰新手。

我从获得所有经销商的网络服务中获取JSON数据。我想将它绑定到GUI,然后能够根据所选区域过滤数组,而无需从Web服务获取新数据并应用。现在看来我需要在jquery.getJSON函数中使用过滤功能和ko.applyBinding(在separete函数中,而不是在示例中的page.ready中)。我不希望这样,因为这意味着我必须从Web服务获取新数据并在每次用户想要过滤数组时运行applybinding。

这段代码非常简单,但我希望你明白这一点:

function GridModel() {
    var self = this;
    self.Dealers = ko.observableArray();
}

var Grid_Model;    

$(document).ready(function () {  
    Grid_Model = new GridModel();  
    ko.applyBindings(Grid_Model); // If this line is here, no data is bound to the GUI at all
    jQuery.getJSON("URL", function (data) {
        Grid_Model.Dealers = ko.mapping.fromJS(data);
        // If I put the filter functionality here, it works
        // If I put ko.applyBindings(Grid_Model); here, it works.
    });
});

function filterDealers(string region) {
    Grid_Model.Dealers = ko.utils.arrayFilter(Grid_Model.Dealers(), function(dealer) {                
        return dealer.RegionName() == region;
    });
}

1 个答案:

答案 0 :(得分:0)

每次都不需要调用apply bindings。将您的代码更改为以下内容。

jQuery.getJSON("URL", function (data) {
    var dealerArray = ko.mapping.fromJS(data);
    // Filter the dealer array here
    Grid_Model.Dealers(filteredArray);
});