2017-07-03 5 views
2

私のルートには2つのパスがあります。私はdoc recommendsという2つのルートを作成しました。EmberがルータのsetupControllerを呼び出さない

私のルータは以下の通りです:

// router.js 
Router.map(function() { 
    this.route('photos'); 
    this.route('photo', { path: '/photo/:photo_id' }); 
}); 

私が最初にルート/写真/ IDを訪問してから/写真に行けば、それは後者のみで一つのオブジェクトを表示します。 (が間違っている

私が/写真を最初に見ると、すべてのオブジェクトが表示され、後で/写真/ IDに行くことができ、それは問題ありません。 (

私は両方の方法で動作させたいです。これを行う方法?あなたはダウンし、以下の各ルートのための私のコードを見ることができます:

// photo.js 
export default Ember.Route.extend({ 
    model(params) { 
    return this.get('store').findRecord('photo', params.photo_id); 
    } 
}); 

// photos.js 
export default Ember.Route.extend({ 
    setupController(controller, model) { 
    let photos = this.get('store').findAll('photo'); 
    console.log('add all...'); 
    // convert to an array so I can modify it later 
    photos.then(()=> { 
     controller.set('photos', photos.toArray()); 
    }); 
    }, 
}); 

ユーザーがどこに行く私は関係なく、常にfindAll()関数を呼び出すことができますが、私は、これはスマートではないと思います。私が使用して写真に移動するには

私はページ遷移を取り扱っております道に/写真/ IDに移動するには

{{#link-to 'photos'}}All{{/link-to}} 

私は「-routing」サービスを注入し、私が使用して一つのイベントでは、次のようにクリックしてください:

routing: Ember.inject.service('-routing'), 
actions() { 
    selectRow(row) { 
     this.get("routing").transitionTo('photo', [row.get('id')]); 
    } 
} 
+1

移行のためにリンク先をどのように呼びますか? 'model'または任意のオブジェクトを提供するとモデルフックとsetupControllerフックが呼び出されません – kumkanillam

+0

コメントにここで不思議に思っていたので質問に追加します – mk2

+0

モデル()を設定していない可能性がありますphotos.jsしたがって、あなたのモデルは更新されていませんか? – Cameron

答えて

2

findAllストアからそれを取得し、それをサーバに要求し、ストアを更新するには、直ちに、後に戻ります。あなたの場合は、ルートモデルのフックを使用していないので、このライブ配列は更新されないので、テンプレートに反映されません。

最初にルート/写真/ IDを訪れてから/ photosに行くと、 は後者に1つのオブジェクトしか表示しません。

上記の場合、ストアには1つのreocrdしか含まれないため、findAllを使用してストアデータを要求すると、既存の単一レコードが返されます。

もう1つの選択肢は、
これを避けることです。これはライブアレイのアップデートを中断させてしまいますが、なぜここに必要なのか分かりません。 photosDS.RecordArrayです。

注:これは、DS.RecordArrayではJavaScript 配列でないことに注意することが重要だ、それはEmber.Enumerableを実装するオブジェクトです。たとえば、 インデックスでレコードを取得する場合は、[]表記が機能しないため、代わりに objectAt(index)を使用する必要があるため、これは重要です( )。

+2

素晴らしい!これは動作します!ありがとう!私は、すべてのデータがすでに挿入されているかどうかをチェックするために1つのことを作成する必要があるかもしれないと思う...そうでなければ、店舗内に既にあっても常にすべての写真を検索する – mk2

関連する問題