Javascript Backbone.js在呈现之前等待回调
在下面的代码块中,我需要确保对Javascript Backbone.js在呈现之前等待回调,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,在下面的代码块中,我需要确保对remoteAPIObj的initialize1和initialize2调用在呈现我的视图之前都已完成。这两个函数都执行AJAX查询并执行给定的回调函数 因此,我定义了另一个函数renderOnce,并在之后使用下划线.js函数,以确保renderOnce在实际执行之前实际上被调用了2次。这种方法缺少什么吗?或者你还有其他建议吗 window.MyView = Backbone.View.extend({ el: $('#right-container'),
remoteAPIObj
的initialize1
和initialize2
调用在呈现我的视图之前都已完成。这两个函数都执行AJAX查询并执行给定的回调函数
因此,我定义了另一个函数renderOnce
,并在之后使用下划线.js函数,以确保renderOnce
在实际执行之前实际上被调用了2次。这种方法缺少什么吗?或者你还有其他建议吗
window.MyView = Backbone.View.extend({
el: $('#right-container'),
render: function(eventName) {
var template = Handlebars.compile($("#right-template").html());
$(this.el).html(template(remoteAPIObj.getData()));
return this;
},
initialize: _.once(function() {
var self = this;
remoteAPIObj.initialize1(function(){self.renderOnce();});
remoteAPIObj.initialize2(function(){self.renderOnce();});
}),
renderOnce: _.after(2, function() {
this.render();
})
});
使用jQuery方法实现这一点的理想方法是:
例如:
$.when( $.ajax("test.aspx") ).then(function(ajaxArgs){
alert(ajaxArgs[1]); /* ajaxArgs is [ "success", statusText, jqXHR ] */
});
如果您的内部代码能够适应承诺,那么您可以这样做
$.when(remoteAPIObj.initialize1, remoteAPIObj.initialize2).then(function(args1, args2){
this.render();
});
否则,还可以使用事件系统触发事件,通知呈现方法数据可用。但这与你已经在做的事情没有太大区别 使用jQuery方法实现这一点的理想方法是-
例如:
$.when( $.ajax("test.aspx") ).then(function(ajaxArgs){
alert(ajaxArgs[1]); /* ajaxArgs is [ "success", statusText, jqXHR ] */
});
如果您的内部代码能够适应承诺,那么您可以这样做
$.when(remoteAPIObj.initialize1, remoteAPIObj.initialize2).then(function(args1, args2){
this.render();
});
否则,还可以使用事件系统触发事件,通知呈现方法数据可用。但这与你已经在做的事情没有太大区别 我认为$.when不会等到initialize1和2的两个回调都被执行,所以我必须使它们内部的操作同步,以使其工作。如果您将其设置为延迟对象,我非常确定它将同时等待这两个对象。很容易用一些测试ajax代码进行测试。使用return$.ajax({…})内部initialize1和initialize2实际上生成了$。when work我认为$。when不会等到initialize1和2的两个回调都被执行,所以我必须使它们内部的操作同步,以使其工作。如果您将其作为延迟对象,我很确定它将同时等待这两个回调。很容易用一些测试ajax代码来尝试它。在initialize1和initialize2中使用return$.ajax({…})实际上可以在工作时生成$