我正在尝试使用Ember 1.0.0-rc1引导一个小应用程序。该应用程序将使用图像做一些事情。我还没有应用程序的任何后端,所以我试图在我嵌入网页源的一些JSON上使用FixtureAdapter。
不幸的是,我似乎无法正确地连接商店。我一直收到有关需要设置YourAppName.Store的错误。
未捕获错误:断言失败:您的应用程序没有 '商店'属性已定义。试图在模型类上调用'all'将会 失败。请提供一个'YourAppName.Store = DS.Store.extend()'
但除非我完全错过了什么,否则我确实设置了它:
window.YIH = Ember.Application.create();
YIH.Photo = DS.Model.extend({
url: DS.attr('string'),
});
YIH.Photo.FIXTURES = JSON.parse(document.getElementById('images').innerHTML);
YIH.Store = DS.Store.extend({
revision: 12,
adapter: DS.FixtureAdapter
});
YIH.photoController = Em.ArrayController.create({
content: YIH.Photo.all(), // blows up
})
我一直在试图让这项工作设置其他属性,但无济于事。
答案 0 :(得分:8)
更新:小提琴现在使用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);
}
});
。它看起来像这样:
id
如果您愿意,可以修改它。
我不确定您的JSON格式是否正确,因为您没有添加代码。无论哪种方式,每个JSON对象应该具有id
属性,并且您的模型应该不具有id
属性,除非您将商店/适配器配置为具有不同于YIH.Photo = DS.Model.extend({
url: DS.attr('string'),
caption: DS.attr('string')
});
。在整个应用程序中,有时你会直接调用id,但有时你必须使用命名约定(例如:“photo”路径中的动态段)。
对于这样的模型:
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'
}
];
为了添加灯具,你必须提供这样的JSON:
{{1}}
您可能需要查看此示例小提琴:http://jsfiddle.net/schawaska/n3hY6/