4

我正在尝试使用 Ember 1.0.0-rc1 引导一个小型应用程序。该应用程序将使用图像做一些事情。我还没有任何类型的应用程序后端,所以我试图在我嵌入网页源的一些 JSON 上使用 FixtureAdapter。

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

未捕获的错误:断言失败:您的应用程序没有定义“存储”属性。尝试在模型类上调用“全部”将失败。请提供与 '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
})

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

4

1 回答 1

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通道。它看起来像这样:setupControllerRoute

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/

于 2013-03-08T20:32:15.273 回答