0

バックボーンでビューをレンダリングするときは、いくつかのリソースを用意する必要があります。ドロップダウン リストを作成する場合は、国、都市、および郵便番号のリストにすることができます。レンダリング関数が呼び出されるたびにすべてのリソースの準備が整うようにするための適切な方法は何だろうと思っていましたか?

デフォルトのレンダリングイベントを使用して、Jquery defered を使用してこのようにすることを考えていますか?

render: function(){
    var listofajaxcall = setupResource(); //returns array of ajax call
    var self = this;
    $.when(listofajaxcall){
    }.done(){
       self.rendering();
    }
},
rendering: function(){
   //do something 
}
4

1 に答える 1

1

これはそれを行う1つの方法であり、一般的な解決策です。

呼び出しからpromiseを返すsetupResourceと、リソースの準備ができるまでビューのレンダリングを延期できます。

さらに、renderingメソッドからイベントをトリガーして、ビューのレンダリングが完了したことを通知することもできます。


render: function(){
    var listofajaxcall = setupResource(); //returns array of ajax call
    var self = this;
    $.when(listofajaxcall){
    }.done(){
       self.rendering();
    }
},
rendering: function(){
   //do something 

   // after it's done...
   this.trigger("rendered");
}

これにより、レンダリングされたイベントをリッスンし、ビューがレンダリングされた後に実行する必要のある追加のコードを呼び出すことができます。

私が好むもう1つの方法は、ビューの外部にコードを設定して、ビューが非同期コードを処理する必要がないようにすることです。



var foo = {

  bar: function(){

    var listofajaxcall = setupResource();

    var self = this;
    $.when(listofajaxcall).then(someResource){

       var view = new MyView({
         someResource: someResource
       });
       view.render();
       $("#whatever").html(view.el);

    }
  }

}

foo.bar();

このバージョンのコードでは、ビューは非同期であることについて何も知りません。それを知っているのは、アプリ内のロジックの流れを制御するコードです。これの欠点は、画面に「読み込み中...」というメッセージを表示する場合は、最初に別のビューをレンダリングする必要があることです。これは、実行される作業の流れをより明確にするため、IMOの価値があります。

于 2012-09-01T12:27:37.493 に答える