例えば、
- KOがすでに登録されているページがあり、監視可能なプロパティ「someProperty」を持つビューモデルがあります。
- 「someProperty」がko.isObservable(viewmodel.someProperty)によって監視可能なプロパティであることを確認します-「true」を返します。
- KOも登録されているhtmlマークアップを取得するためにajax呼び出しを行います。
- ここで、ko.isObservable(viewmodel.someProperty)をチェックすると、falseが返されます。
また、手動で追加されたすべてのKO拡張機能は失われます。jQuery( http://bugs.jquery.com/ticket/10066 )のバグ(または機能)のように見えます。
var viewModel = new function() {
var self = this;
this.serverData = {
Controller: ko.observable(null),
Enabled: ko.observable(false),
Id: ko.observable(null),
ParentId: ko.observable(null),
Title: ko.observable(null),
MaterialId: ko.observable(null),
Alias: ko.observable(null)
};
this.treeData = {
tree: ko.observable(null),
node: ko.observable(null)
};
this.submit = submit;
this.cancel = cancel;
this.openMaterials = menuOptions.openMaterials;
}
// ...
var data = ko.utils.createUnobservable(viewModel.serverData);
// ...
(function(ko) {
ko.utils = ko.utils || {};
ko.utils.createUnobservable = function(observable) {
var unobservable = {};
(function() {
for (var propertyName in observable) {
var observableProperty = observable[propertyName];
if (ko.isObservable(observableProperty) /* always 'false' after ajax */) {
unobservable[propertyName] = observableProperty();
}
}
})();
return unobservable;
};
})(ko = ko || {});