Javascript 在ajax调用后应用淘汰绑定

Javascript 在ajax调用后应用淘汰绑定,javascript,ajax,asp.net-mvc,knockout.js,Javascript,Ajax,Asp.net Mvc,Knockout.js,我的视图中有以下脚本: <script> MyObj.initModel(getUrl); $(document).ready(function () { ko.applyBindings(MyObj.viewModel, document.getElementById("someId")); }); </script&

我的视图中有以下脚本:

<script>           
        MyObj.initModel(getUrl);            
        $(document).ready(function () {                
            ko.applyBindings(MyObj.viewModel, document.getElementById("someId")); 
        });
    </script> 
但在本例中,我得到了一个错误,即多次绑定到同一个元素

$(document).ready(function () { 
    var bindingCallback = function () {                
        ko.applyBindings(MyObj.viewModel, document.getElementById("someId")); 
    }; 

    MyObj.initModel(getUrl, bindingCallback);
});

然后在initModel中,只需通过添加类似于
bindingCallback()的内容来调用AJAX成功方法中的bindingCallback方法在其中

我的数据加载方法在我的viewmodel中,所以一旦ajax调用成功,我只需对自己应用绑定

ko.applyBindings(self, document.getElementById("someId"));
在viewmodel的顶部声明了self

 var self = this;
另外,因为我刚刚研究了如何使用jQueryAjax中的promise模式,所以我想我可以省去下一个猴子的麻烦。 因此,您只需让initModel返回ajax调用的结果,这样您就可以使用when()和then(),从而:


这是未经测试的代码

您是否尝试过$.ajax({url:“test.html”,context:document.body}).done(函数(){$(this.addClass(“done”);});我建议使用这种方法,但是使用jquery的ajax调用免费获得的promise模式。现在没有必要再为这样的事情打电话了。
 var self = this;
$(document).ready(function () { 
   $.when(MyObj.initModel(getUrl)).then(function() {
        ko.applyBindings(MyObj.viewModel, document.getElementById("someId"));
    });
});

function MyObj() {
    this.initModel = function(getUrl){

         return $.ajax({url: getUrl});

    }
}