Backbone.js在渲染之前等待回调

Backbone.js wait until callback before rendering

本文关键字:等待 回调 js Backbone      更新时间:2023-09-26

在下面的代码块中,在呈现视图之前,我需要确保对remoteAPIObjinitialize1initialize2调用都已完成。这两个函数都在执行AJAX查询并执行给定的回调函数。

因此,我定义了另一个函数renderOnce,并使用undercore.js函数after来确保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 promise方法实现这一点的理想方法-http://api.jquery.com/jQuery.when/

示例:

$.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();
});

否则,还可以使用事件系统触发一个事件,通知渲染方法数据可用。但这与你已经在做的事情没有太大的不同。