我得到了以下简单的ember.js-setup,它可以很好地运行
App.Router.map(function() {
this.resource('tourdates', function() {
this.resource('tourdate', { path: ':tourdate_id' });
});
});
App.TourdatesRoute = Ember.Route.extend({
model: function() {
return $.getJSON('http://someapi.com/?jsoncallback=?').then(function(data) {
return data;
});
}
});
App.TourdateRoute = Ember.Route.extend({
model: function(params) {
return tourdates.findBy('id', params.tourdate_id);
}
});
所以,很简单,每当我调用index.html#/ tourdates时,我都会通过api获取数据。当我点击此视图中的链接并调用f.e. index.html#/ tourdates / 1它只显示其嵌套子项的视图。
当我直接使用消息
调用index.html#/ tourdates / 1时,这一切都会中断DEPRECATION: Action handlers contained in an `events` object are deprecated in favor of putting them in an `actions` object (error on <Ember.Route:ember174>)
Error while loading route: ReferenceError {}
Uncaught ReferenceError: tourdates is not defined
虽然他对api进行ajax调用并获取数据,但他无法初始化嵌套模型
答案 0 :(得分:0)
加载App.TourdatesRoute
时,将呈现来自json的所有数据。当你点击编辑其中一个加载对象时,例如使用链接,ember足够聪明,可以获取已经引用的对象,而不是发送新请求。因此,您的网址将更改为:yourhost.com/tourdate/id
。
当您直接致电此网址时,它会调用App.TourdateRoute
model
方法。因为没有任何预加载的数据。但在你的情况下你有一个:
tourdates.findBy('id', params.tourdate_id);
我无法在任何地方看到tourdates
的声明。
我建议您将TourdateRoute
更改为TourdateIndexRoute
,以便在转换到tourdates
时执行ajax调用一次:
App.TourdatesIndexRoute = Ember.Route.extend({
model: function() {
return $.getJSON('http://someapi.com/?jsoncallback=?').then(function(data) {
return data;
});
}
});
TourdatesRoute
和TourdateRoute
都会调用TourdatesIndexRoute
,因为它是两者的父路由。因此,获取TourdatesIndexRoute
中的所有数据将确保在转换为tourdates
时调用此数据。
在TourdateRoute
中,您只会加载所需的记录。像这样:
App.TourdateRoute = Ember.Route.extend({
model: function(params) {
// retrieve just one data by id, from your endpoint
return $.getJSON('http://someapi.com/' + params.tourdate_id + '?jsoncallback=?').then(function(data) {
return data;
});
}
});
因此,直接调用yourhost.com/tourdate/id
只会加载一条记录。
关于您的警告信息,因为在某些路线中您有:
App.MyRoute = Ember.Route.extend({
events: {
eventA: function() { ...},
eventB: function() { ...},
}
});
{@ 1}}已弃用,您需要使用events
:
actions
我希望它有所帮助