gpt4 book ai didi

ember.js - 你如何在 Ember.js 中将默认存储设置为 FixtureAdapter?

转载 作者:行者123 更新时间:2023-12-04 23:24:26 26 4
gpt4 key购买 nike

我正在尝试使用 Ember 1.0.0-rc1 引导一个小应用程序。该应用程序将对图像进行一些处理。我还没有任何类型的应用程序后端,所以我试图在我嵌入到网页源代码中的一些 JSON 上使用 FixtureAdapter。

不幸的是,我似乎无法正确连接商店。我不断收到关于需要设置 YourAppName.Store 的错误。

Uncaught Error: assertion failed: Your application does not have a 'Store' property defined. Attempts to call 'all' on model classes will fail. Please provide one as with '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
})

我试图使这项工作设置其他属性,但无济于事。

最佳答案

更新 : fiddle 现在使用 Ember RC2 和 Ember-Data rev 12

你不需要create Controller ,只需附加 Controller 类和 extend来自 Ember.ArrayController用于收藏或 Ember.ObjectController对于单个对象。

YIH.PhotosController = Em.ArrayController.extend();
YIH.PhotosPhotoController = Em.ObjectController.extend();

Ember 将实例化这些 Controller 并在您的应用程序生命周期内管理它们。

使用 FixtureAdapter 设置商店, 做这个:
YIH.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.FixtureAdapter'
});

设置 content对于您的 Controller ,建议通过路由来完成,如下所示:
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);
}
});

Controller 将收到 model通过 setupController这是烘焙成 Route即使你不写。它看起来像这样:
SomeRoute = Em.Route.extend({
setupController: function(controller, model) {
controller.set('content', model);
}
});

如果你愿意,你可以修改它。

我不确定您的 JSON 格式是否正确,因为您没有添加代码。无论哪种方式,每个 JSON 对象都应该有一个 id属性和您的模型应该 不是 有一个 id属性,除非您将商店/适配器配置为具有不同于 id 的主键.在整个应用程序中,有时您会直接调用 id,但有时您必须使用命名约定(例如:“照片” route 的动态段)。

对于这样的模型:
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'
}
];

您可能想查看此示例 fiddle : http://jsfiddle.net/schawaska/n3hY6/

关于ember.js - 你如何在 Ember.js 中将默认存储设置为 FixtureAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com