プロパティモデルにメソッドを実装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()
。
前もって感謝します。