0

したがって、メイン ビューに追加されるサブビューを作成するバックボーン ビューがあるというジレンマがあります。これらの各サブビューは、サブビューを完成させるためにデータを取得する ajax 呼び出しを行う必要があります。これで、スーパー ビューは各サブビューの render を呼び出し、それをそれ自体に追加します。次に、メインビューの要素を取得してサーバーに投稿します。問題は、投稿をサーバーに送信した後に 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 に答える