我正在尝试用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
})
Run Code Online (Sandbox Code Playgroud)
我一直在试图让这项工作设置其他属性,但无济于事.
更新:小提琴现在使用Ember RC2和Ember-Data rev 12
您不需要create控制器,只需附加控制器类,extend无论是Ember.ArrayController对于集合还是Ember.ObjectController对于单个对象.
YIH.PhotosController = Em.ArrayController.extend();
YIH.PhotosPhotoController = Em.ObjectController.extend();
Run Code Online (Sandbox Code Playgroud)
Ember将实例化这些控制器并在整个应用程序生命周期内对其进行管理.
要使用,设置商店FixtureAdapter,请执行以下操作:
YIH.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});
Run Code Online (Sandbox Code Playgroud)
要设置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);
}
});
Run Code Online (Sandbox Code Playgroud)
即使你不写它,控制器也会收到model通过setupController它的通过Route.它看起来像这样:
SomeRoute = Em.Route.extend({
setupController: function(controller, model) {
controller.set('content', model);
}
});
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你可以修改它.
我不确定您的JSON格式是否正确,因为您没有添加代码.无论哪种方式,每一个JSON对象应该有一个id属性,你的模型应该不会有一个id属性,除非您配置存储/适配器比一个主键不同id.在整个应用程序中,有时您将直接调用id,但有时您将不得不使用命名约定(例如:"照片"路径中的动态段).
对于这样的模型:
YIH.Photo = DS.Model.extend({
url: DS.attr('string'),
caption: DS.attr('string')
});
Run Code Online (Sandbox Code Playgroud)
为了添加灯具,你必须提供这样的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'
}
];
Run Code Online (Sandbox Code Playgroud)
你可能想检查这个样本小提琴:http://jsfiddle.net/schawaska/n3hY6/