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});
}
}