【发布时间】:2012-08-21 22:40:24
【问题描述】:
我在我的属性模型上实现了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。没有任何内容被传递给 Property 控制器的 content 属性。如何在find() 方法中进行异步调用?除非我弄错了,否则异步调用在 findAll() 方法中可以正常工作,这是我困惑的根源。
这个问题类似于Deserialize with an async callback,但我使用的是find() 方法,而不是覆盖deserialize() 方法。
提前致谢。
【问题讨论】:
标签: javascript ember.js