0

例えば、

  1. KOがすでに登録されているページがあり、監視可能なプロパティ「someProperty」を持つビューモデルがあります。
  2. 「someProperty」がko.isObservable(viewmodel.someProperty)によって監視可能なプロパティであることを確認します-「true」を返します。
  3. KOも登録されているhtmlマークアップを取得するためにajax呼び出しを行います。
  4. ここで、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 || {});
4

1 に答える 1

0

ロードされたajaxを含める前にグローバル変数のコピーを保存し、ko後でそれを復元することで、これを修正できます。

var savedKo = window.ko;
.... // do the ajax thing
window.ko = savedKo;
于 2013-03-05T20:42:16.320 に答える