2016-03-19 8 views
0

5つのカテゴリを表示するルートがあります。各カテゴリは1人の子供しか持たないことを意図しています。私は子供のルートを作成し、選択されたカテゴリタイプidをqueryparamterとして渡します。子ルートモデル()では、store.queryRecord()でパラメーターを使用して、バックエンドに照会して、そのタイプに一致するレコードを返すか、何も返さないようにします。レコードが存在する限り、これは正常に動作するようです。私が実行している問題は、子レコードを持たないカテゴリを選択した場合です。 queryRecordから何も返されない場合、テンプレートは前のデータを表示し続けます。ネットワーク要求が正常に完了したことがわかり、空の配列が返されます。ページを更新すると、テンプレートにモデルデータがないことが正しく示されます。モデルがstore.queryRecordを返すときに、レンダリングされたテンプレートを更新します。

モデルがレコードをもはや持っていないときにテンプレートをリフレッシュする方法を見つけようと、一日中苦労しました。私はこれを後ろ向きにしていると感じています。私はどんな指針にも感謝しています。

親:

export default Ember.Route.extend(AuthenticatedRouteMixin,{ 
    user: Ember.inject.service('user'), 

    model() { 
    var user = this.get('user'); 
    return this.store.findAll('strategic-priority',{ location: user.get('selectedLocationId'), year: user.get('selectedYearId') }); 
    } 
}); 

HBS 
{{#each model as |strategic-priority|}} 
    {{#link-to 'priority-area.goal' (query-params priorityArea=strategic-priority.id) class="list-group-item"}} {{strategic-priority.label}} - {{strategic-priority.text}} {{/link-to}} 
{{/each}} 

子供:

{{#if hasModel}}とカテゴリを表示するテンプレートをラップすることですあなたは試みることができる
export default Ember.Route.extend({ 
    user: Ember.inject.service('user'), 
    queryParams: { 
    priorityArea: { 
     refreshModel: true, 
     replace: false, 
    } 
    }, 

    model(params) { 
    Ember.Logger.debug(params); //I see this is in the console so I know this code is being called each time 
    var user = this.get('user'); 
    return this.store.queryRecord('goal',{ location: user.get('selectedLocationId'), year: user.get('selectedYearId'),priority: params.priorityArea}); 
} 
}); 
+0

子レコードがあります。だからあなたは 'category'モデルを持っていて、' hasMany() 'のようないくつかの関係データを持っていますか?あなたのプロジェクトやjsbin/ember twiddleに公開されているgithubのリンクがありますか?あなたのコードを見ることができますか? – Zoltan

+0

正直言って私はhasManyの使い方を本当に理解していません。この場合、理論上の各カテゴリには多くの子がありますが、特定のパラメータと一致する子のみを表示し、最初はユーザーが作成するまで子を表示しません。私はqueryRecordを使用していたので例を作ることはできないと思っていましたが、前にember twiddleについて聞いていなかったので、私はそのショットを与えます。ありがとう! – HappyDude

答えて

0

ためのコントローラで、私にはわからないが、私の回避策は、むしろstore.queryを使用するようにモデルを変更することでしたqueryRecordより。私のテンプレートでは、私は1つのレコードしか期待していませんでしたが、{{#それぞれのモデルを| xx |}}しました。

また、ほとんどの場合、hasManyを使用して状況を回避することもできました。バックエンドでデータを収集するのはちょっと面倒です(少なくとも私のスキルレベルでは、phpとzf2を使用していますが)結局はかなりうまくいくようです。

ありがとうございました。

0

。だから、これは正解であれば

{{#if hasModel}} 
    ... your template ... 
{{/if}} 

のようなものや、あなたのルート

hasModel: Ember.computed.notEmpty('model') 
+0

私はこれを打ちましたが、私は同じ問題に遭遇しました。テンプレートに{{log hasModel}}を追加しました。バックエンドからモデルを返すリンクをクリックすると、trueと表示されます。モデルをロードしないリンクをクリックすると、再度評価されないように見えます(ログには表示されません)。ブラウザの更新ボタンをクリックしてページをリロードすると、正しくログされません。モデルを返すリンクを選択すると、それは真に更新されますが、逆方向では機能しません。 – HappyDude

関連する問題