プロパティモデルにメソッドを実装find()しました。findAll()どちらのメソッドも、APIを非同期で呼び出します。 findAll()私のホームルートのアウトレットを接続しているときに呼び出され、正常に動作します。 find()私のプロパティルートのアウトレットを接続しているときにEmber.jsによって呼び出されます。find()これは、アクションを介してプロパティルートに移動するときに呼び出されるのではなく、URLを介してルートに直接移動するときに呼び出されることに注意してください。
これが私のルーターです:
App.Router = Ember.Router.extend({
root: Ember.Route.extend({
showProperty: Ember.Route.transitionTo('property'),
home: Ember.Route.extend({
route: '/',
connectOutlets: function(router) {
router.get('applicationController').connectOutlet('home', App.Property.findAll());
}
}),
property: Ember.Route.extend({
route: '/property/:property_id',
connectOutlets: function(router, property) {
router.get('applicationController').connectOutlet('property', property);
}
}),
})
});
そして、ここに私の方法findAll()とfind()方法があります:
App.Property.reopenClass({
find: function(id) {
var property = {};
$.getJSON('/api/v1/property/' + id, function(data) {
property = App.Property.create(data.property);
});
return property;
},
findAll: function() {
var properties = [];
$.getJSON('/api/v1/properties', function(data) {
data.properties.forEach(function(item) {
properties.pushObject(App.Property.create(item));
});
});
return properties;
}
});
たとえば、インデックス以外のルートに移動するとhttp://app.tld/#/property/1、ルートはに書き換えられhttp://app.tld/#/property/undefinedます。contentプロパティコントローラーのプロパティには何も渡されていません。find()メソッドで非同期呼び出しを行うにはどうすればよいですか?私が間違っていない限り、非同期呼び出しはfindAll()メソッドで正常に機能します。これが私の混乱の原因です。
この質問は、非同期コールバックを使用したDeserializeに似ていますが、メソッドfind()をオーバーライドする代わりにメソッドを使用していますdeserialize()。
前もって感謝します。