1

私は次のように設定されたコントロールを持っています:

  1. 非同期にロードされたビューをレンダリングします。
  2. ビューのデータも非同期でロードされます。
  3. ルート変更をリッスンします。ルート ハンドラーの 1 つは、手順 2 で読み込まれたモデルの詳細を含むモーダルを表示します。

問題は、ユーザーがモデルを指すルートを持つページに到達する可能性があることです。これは、コントロールが初期化された時点では使用できないため、明らかにモーダルがロードされません。

can.Control({
    init: function() {
       can.view('file.ejs', {pages: app.Model.Page.findAll()}, function(frag){
          // inject the fragment into DOM
       });
    },
    'page/:id/comments route': function() {
       // find the page in the list of models loaded, than display the modal
    }
});

ビューがレンダリングされた後にディスチャーを再度トリガーするか、コントローラーをルートに移動させるにはどうすればよいですか?

4

1 に答える 1

0

findAll が返す Deferred をどこかに保存すると、ルートでそれを使用して、いつ読み込まれたかを知ることができます。

http://canjs.com/docs/can.when.html

コントロールの this.pages にページを格納する例を次に示します
(見栄えはよくありませんが、理解しやすいです) 。

can.Control({
    init: function() {
        this.pages = app.Model.Page.findAll()
        can.view('file.ejs', {pages: pages}, function(frag){
            // inject the fragment into DOM
        });
    },
    'page/:id/comments route': function() {
        can.when(this.pages).then(function(pages){
            // find the page in the list of models loaded, than display the modal
        })
    }
});
于 2014-02-03T02:07:43.043 に答える