私のルートは次のように定義されています:
setupController: function (controller, model) {
var analyticsRuns,
store = this.get('store'),
exerciseRunId = this.controllerFor('analyticsContext').get('exerciseRunId');
// Query the server for all runs that belong to this exercise run.
// The results of the query will be loaded into the store so we can start
// filtering them, thus taking advantage of live updates.
// (see http://emberjs.com/guides/models/frequently-asked-questions/)
store.find('analyticsRun', { 'exerciseRunId': exerciseRunId });
analyticsRuns = store.filter('analyticsRun', function (analyticsRun) {
return analyticsRun.get('exerciseRunId') === exerciseRunId;
});
controller.set('model', analyticsRuns);
controller.set('exerciseRunId', exerciseRunId);
controller.set('analyticsTemplates', store.find('analyticsTemplate'));
controller.set('exerciseRun', store.find('exerciseRun',exerciseRunId));
controller.send('setAnalyticsRunSelectOptions');
}
そして、私のコントローラーアクションでは、「setAnalyticsRunSelectOptions」は次のように定義されています:
setAnalyticsRunSelectOptions: function () {
var options = [], run;
//console.log(this.get('content'));
//console.log(this.get('content.length'));
//for(var i= 0,len=this.get('content.length');i<len;i++){
// run = this.get('content').objectAt(i);
// options.push({"id": run.get('id'), "label": run.get('id') + " " + run.get('name')});
//}
console.log(this.get('content'));
this.get('model').forEach(function (run) {
options.push({"id": run.get('id'), "label": run.get('id') + " " + run.get('name')});
});
this.set('analyticsRunSelectOptions',options);
}
しかし、firebug でその関数内の「コンテンツ」をログに記録すると、次のように表示されます
{ content=[0], store=, manager=, もっと...}
しかし、(firebugで)クリックすると、そこにコンテンツが表示されます。setAnalyticsRunSelectOptions が呼び出されたときにコンテンツがまだ入力されていないためだと考えています。コンテンツが利用可能になったときにのみアクションをトリガーする方法はありますか??
ありがとう、ディー