我已经在我的属性模型上实现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;
}
});
例如,当我转到 index 以外http://app.tld/#/property/1
的路线时,路线会被重写为http://app.tld/#/property/undefined
. 没有任何东西被传递给content
属性控制器的属性。如何在find()
方法中进行异步调用?除非我弄错了,否则异步调用在findAll()
方法中可以正常工作,这是我困惑的根源。
这个问题类似于Deserialize with an async callback,但我使用的是该find()
方法而不是覆盖该deserialize()
方法。
提前致谢。