いくつかのオブザーバブルと、バインディングが適用された後にのみ認識されるプロパティを持つViewModelがあります。
たとえば、私のUIは、下に一致するものを表示する検索ボックスで構成されています。最初は、アタッチするデータがないため、ビューモデル内の一致のプロパティはnullです。ただし、検索ボックスが3文字以上になると、AJAX呼び出しが行われ、データがフェッチされます。
マッピングプラグインを呼び出すと、呼び出しからのデータをKOにマッピングするために、KOが監視可能な配列を遅延バインドできないかのようになります。問題は、そもそもバインディングを設定するためにマップに与えるものが何もないことです。
私のコード:
var vm = new function () {
var self = this;
self.customers = null;
self.searchText = ko.observable("");
self.searchText.subscribe(function (data) {
if (data.length > 2) {
// do search
$.get("/customers/getall", { searchTerms: self.searchText }, function (resp) {
if (!self.customers) {
// first mapping
self.customers= ko.mapping.fromJS(resp.customers);
} else {
ko.mapping.fromJS(self.customers, resp.customers);
}
});
}
});
}
ko.applyBindings(vm, $("#searchCustomersScope")[0]);