0

1日分のアクティビティを管理するアレイコントローラーActivitiesControllerがあります(フルセットではありません)。modelのプロパティをActivitiesRoute次のように設定しました。

return this.store.find('activity', {on_date: params.on_date});

これにより適切なレコードが引き戻され、Ember デバッガー内でそれらすべてを確認できますが、何らかの理由でこれらのレコードをテンプレートで使用できません ( activities.hbs)。それは私を困惑させましたが、実際にはとにかく最終的な解決策ではありません(私はそれがうまくいくと思っていました).

私が実際にやりたいことは、指定された日付にフィルター処理されたローカル Activityレコードの配列をコントローラーのコンテンツで管理することです。このフィルタリングされた配列は、更新クエリへの非同期呼び出しに基づいて定期的に更新されます: find('activity', {on_date: this.get('on_date'), since: this.get('since');.

その説明が理にかなっていることを願っています。SOに関する他のクエリを調べたところ、有望なスタートがいくつかありましたが、答えはすべて古くなっているようで、このナットを解くのに役立つものを見つけることができました.

要約すると、私はしたい:

  1. コントローラーを、特定の日付に対応するローカル レコードcontentのアクティブ フィルターにします。Activity
  2. コントローラーに自動的に表示されるモデルに追加のレコードを非同期にプッシュできるようにします (それらが適切な日付であると仮定します)。

余談ですが、現在のmodelフックがアクティビティ テンプレートで利用できない理由を知りたいです。

- - - - - - - アップデート - - - - - - -

モデルフックでこれを試しました:

return this.store.filter('activity',function(activity){
    var itemDate = new Date(activity.get('start_time'));
    itemDate = moment(itemDate).format('YYYY-MM-DD');
    return itemDate === params.on_date;
});

これは、@Bradley の提案と一致している必要があります。時間コンポーネントを切り詰める必要があったため、moment.js ライブラリを使用してそのロジックを追加しました。これはエラーをスローしませんが、サーバー自体からレコードをプルすることもありません。そのため、次のコード行をモデル フックに追加しました。

this.set('activities', this.store.find('activity', {on_date: params.on_date}));

デバッガーを使用すると、 にとして設定されたActivityRouteプロパティがあり、そのプロパティの長さがその日のアクティビティ数である 15 であることがわかります。activitiesDS.PromiseArrayactivities

また、currentModelofActivityRouteが a に設定されているように見えDS.FilteredRecordArray、適切な 15 レコードも含まれていますが、私のハンドルバー テンプレートはまだそれを反復することができません。これは、のcontentプロパティがActivityController設定されていないためだと思います。この状況で Ember がこのステップを実行しないのはなぜですか? これを強制する必要がありますか、それともシステムにからかう必要があるグレムリンがありますか?

4

1 に答える 1

2

ローカル フィルタリングの場合は、 DS.Store#filter関数を探しています。

return this.store.filter('activity', function(activity) { 
  activity.get('on_date') === params.on_date
});

これは、新しい/更新されたレコードでライブ更新する DS.FilteredRecordArray を返します。

于 2013-10-05T08:39:28.247 に答える