Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js在呈现之前等待回调_Javascript_Backbone.js_Underscore.js - Fatal编程技术网

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({…})实际上可以在工作时生成$