0

所以我有这个困境,我有一个主干视图,它创建一个将附加到主视图的子视图。这些子视图中的每一个都必须进行 ajax 调用来检索数据以完成子视图。现在超级视图调用每个子视图渲染并将其附加到自身。然后我获取主视图的元素并将其发布到服务器,问题是在我将帖子发送到服务器后,ajax 完成了。有没有更好的方法来使用异步调用来构建这项工作?我有这个同步工作,但加载栏甚至没有出现。

所以这里是它的例子:

WebView
generate:function(){
    var html = new MainView().render().el
    //ajax post to server with html
}

MainView 
    initalize:
    render:function(){
        this.el.append(new Subview().render().el);
    }

Subview
    initialize:
    render:fucntion(){
        //ajax - with  a success that alters the el
        return this;
    }

现在,在我什至可以从调用中取回数据之前,生成函数就完成了,我无法绑定到任何东西,因为数据已经发送到服务器。

4

1 回答 1

1
MainView
childViews = [];
renderCompletedChildViews = 0;
addChildView: function () {
   var subView = new SubView();
   this.childViews.push(subView);
   subView.on("renderComplete", postToServer, this);
}
render: function () {
   for( var i=0; i<this.childViews.length; i++ ) {
        this.childViews[i].render(this.el);
   }
}
postToServer: function () {
   this.renderCompletedChildViews++;
   if( this.renderCompletedChildViews == this.childViews.length) {
       // Interact with server
   }
}


SubView
render: function (el) {
   // Make an ajax call, on receiving data append the data to el passed by parent view and trigger "renderComplete" on current instance
}

这样,您就使代码完全事件驱动和异步。

于 2012-09-06T07:10:29.637 回答