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

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



但除非我完全错过了什么,我确实设置了它:

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 ,只需从 extend 为集合或 Ember.ArrayController 为单个对象附加 Controller 类和 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'
});

要设置 Controller 的 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);
    }
});

Controller 将通过 model 接收 setupController,即使您不编写它,该 Route 也会被烘焙到 id 中。它看起来像这样:
SomeRoute = Em.Route.extend({
    setupController: function(controller, model) {
        controller.set('content', model);
    }
});

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

我不确定您的 JSON 格式是否正确,因为您没有添加代码。无论哪种方式,每个 JSON 对象都应该有一个 id 属性,并且您的模型应该 而不是 有一个 id 属性,除非您将商店/适配器配置为具有与 ojit_code 不同的主键。在整个应用程序中,有时您会直接调用 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/

10-11 15:28
查看更多