更新:小提琴现在使用 Ember RC2 和 Ember-Data rev 12
您不需要create
控制器,只需附加控制器类和extend
来自Ember.ArrayController
集合或Ember.ObjectController
单个对象。
YIH.PhotosController = Em.ArrayController.extend();
YIH.PhotosPhotoController = Em.ObjectController.extend();
Ember 将实例化这些控制器并在您的应用程序生命周期内管理它们。
要使用 设置商店FixtureAdapter
,请执行以下操作:
YIH.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});
要设置content
控制器的,建议通过路由来完成,如下所示:
YIH.Router.map(function() {
this.resource('photos', function() {
this.route('photo', { path: ':photo_id' });
});
});
YIH.IndexRoute = Em.Route.extend({
redirect: function() {
this.transitionTo('photos');
}
});
YIH.PhotosRoute = Em.Route.extend({
model: function() {
return YIH.Photo.find();
}
});
YIH.PhotosPhotoRoute = Em.Route.extend({
model: function(params) {
return YIH.Photo.find(params.photo_id);
}
});
即使您不编写控制器,控制器也会收到被烘焙到其中的model
通道。它看起来像这样:setupController
Route
SomeRoute = Em.Route.extend({
setupController: function(controller, model) {
controller.set('content', model);
}
});
如果你愿意,你可以修改它。
我不确定您的 JSON 格式是否正确,因为您没有添加代码。无论哪种方式,每个 JSON 对象都应该有一个id
属性,而您的模型不应该有一个id
属性,除非您将存储/适配器配置为具有不同于id
. 在整个应用程序中,有时您会直接调用 id,但有时您必须使用命名约定(例如:“照片”路由中的动态段)。
对于这样的模型:
YIH.Photo = DS.Model.extend({
url: DS.attr('string'),
caption: DS.attr('string')
});
为了添加固定装置,您必须像这样提供 JSON:
YIH.Photo.FIXTURES = [
{ id: 1,
url: 'http://ecx.images-amazon.com/images/I/516cyMC9O7L.jpg',
caption: 'Image 1'
},
{ id: 2,
url: 'http://ecx.images-amazon.com/images/I/51og8BkN8jL._SS250_.jpg',
caption: 'Image 2'
}
];
您可能想检查这个示例小提琴:http: //jsfiddle.net/schawaska/n3hY6/