ここでノックアウトするのはかなり新しいです。
すべてのディーラーを取得するWebサービスからJSONデータを取得します。これをGUIにバインドし、後でWebサービスから新しいデータを取得して適用しなくても、選択した領域に基づいて配列をフィルタリングできるようにしたいです。ここで、jquery.getJSON関数内でフィルタリングとko.applyBindingの両方の機能が必要なようです(例のようにpage.readyではなく、separete関数で)。これは、ユーザーが配列をフィルタリングするたびに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;
});
}