1

これは、ko.applyBindings() で見つけた唯一の公式ドキュメントです。

http://knockoutjs.com/documentation/observables.html

これは、何がオプションかなどを正確に述べた正式な文書ではありません。テストでは、ko.applyBindings() を呼び出すと、グローバル スコープでバインディングが可能になり、正常に動作するように見えます。ソースコードを研究した人 (または私よりも KO について詳しい人) は、これが安全かどうかを知っていますか? パフォーマンスの問題はありますか?

これは、私が取り組んでいる SPA の「アプリ」オブジェクトの始まりです。

var app = {

self: this,
datacontext: new DataContext(),
dataservice: new DataService(),
viewModels: {
    main: new MainViewModel(),
    folderDetails: new FolderDetailsViewModel()
},

init: function() {

    ko.applyBindings();

    Sammy(function() {

        this.get('#:folder', function() {
            self.doFolderRoute(this.params.folder);
        });

        // Override this function so that Sammy doesn't mess with forms
        this._checkFormSubmission = function(form) {
            return (false);
        };

    }).run();

},

doFolderRoute: function(id) {
    console.log("doFolderRoute: " + id);
}
}

ko.applyBindings(self.viewModels) を実行して、モデルへのデータ バインドを制限することもできますが、何にでもバインドできる自由が好きで、app を入力することも気にしません。私のコードのviewModels.mainと、単なる「メイン」です。

4

2 に答える 2

2

を使用するko.applyBindings()と、Knockout はビュー モデルを認識しなくなります。設定されず、ルート レベルで$rootも設定されません。$data明らかに、これらの変数を参照することはできません。また、イベント バインディング$dataはイベント ハンドラー関数に渡されます。この場合はundefined.

于 2013-02-15T21:56:43.257 に答える
0

参考までに-これは私の更新されたアプリです(明らかに進行中です):

私は自分自身を理解しました:これは元のコードでwindowを指していたので、明らかにそれは悪い考えであり、ko.applyBindings(self.viewModels)を試したときに奇妙な結果が得られた1つの理由でした。

var app = {

datacontext: new DataContext(),
dataservice: new DataService(),
viewModels: {
    main: new MainViewModel(),
    folderDetails: new FolderDetailsViewModel()
},

init: function() {

    ko.applyBindings(app.viewModels);

    Sammy(function() {

        this.get('#:folder', function() {
            self.doFolderRoute(this.params.folder);
        });

        // Override this function so that Sammy doesn't mess with forms
        this._checkFormSubmission = function(form) {
            return (false);
        };

    }).run();

    widgetLib.init();

},

doFolderRoute: function(id) {
    console.log("doFolderRoute: " + id);
}
}
于 2013-02-15T22:06:25.967 に答える