私は Ember Data を使用しておらず、リモート ソースからデータをプルするためにモデルで ajax 呼び出しを行っています。API からデータを正常に受信したら、カテゴリに基づいて並べ替え/フィルター処理したいと考えています。私の計画は、モデルからデータを取得したら、コントローラーを介してフィルター処理されたデータの状態を管理できるようにすることです。
私の問題は、モデル内のデータのフェッチが非同期であるため、コントローラーでメソッドを正確に呼び出して、テンプレートに表示されるデータをフィルター/ソートできないことです。
以下と私の jsfiddle内の私のコードの関連部分。テンプレートの反復処理でissue_list
は、情報を簡単に表示できます。ただし、配列を反復処理したいのですが、配列が実際categorized_issues
にいつ設定されるかわからないため、IssuesControllerのメソッドを呼び出すことができます。issue_list
categorize
// Default Route for /issues
App.IssuesIndexRoute = Ember.Route.extend({
setupController: function() {
var issues = App.Issue.all(25);
this.controllerFor('issues').processIssues(issues);
}
});
// Model
App.Issue = Ember.Object.extend({});
App.Issue.reopenClass({
// Fetch all issues from the ajax endpoint.
// Won't work on the JS fiddle
all: function() {
var issues = [];
$.ajax({
url: "http://localhost:3000/issues.json",
dataType: 'json',
}).then(function(response) {
response.issues.forEach(function(issue) {
issues.addObject(App.Issue.create(issue));
}, this);
});
return issues;
},
});
// Controller
App.IssuesController = Ember.ArrayController.extend({
issue_list: [],
categorized_issues : {"open":[], "closed": []},
processIssues: function(issues) {
this.set('issue_list', issues);
return issues;
},
categorize: function() {
var self = this;
this.issue_list.forEach(function(i) {
// Based on the issue open or closed status
if (i.status == "open") {
self.categorized_issues["open"].addObject(i);
} else {
self.categorized_issues["closed"].addObject(i);
}
});
},
});
だから私の計画は次のとおりです。
- モデルからデータを取得する
- コントローラーでのステータス (オープンまたはクローズ) に基づいてデータを再分類します。
- この新しいデータをテンプレートに表示します。
私はこれを達成することができます。それについてのアイデアはありますか?
DEBUG: -------------------------------
DEBUG: Ember.VERSION : 1.0.0-rc.2
DEBUG: Handlebars.VERSION : 1.0.0-rc.3
DEBUG: jQuery.VERSION : 1.9.1
DEBUG: -------------------------------