【问题标题】:Where is fixture data in ember.js with cli带有cli的ember.js中的夹具数据在哪里
【发布时间】:2014-05-23 23:09:09
【问题描述】:

我正在尝试在使用 cli 生成的 ember 应用中使用夹具数据。我找不到我的数据。检查员显示我有一个名为 post 的模型,但其中没有任何内容。我不确定为什么它不起作用,所以发布我认为相关的文件......

模型/post.js

var Post = DS.Model.extend({
    title: DS.attr('string'),
    content: DS.attr('string'),
    publishDate: DS.attr('date')
});

Post.reopenClass({
    FIXTURES: [
        {
            id: 1,
            title: "Writing a blog in Ember",
            content: "I am writting a blog",
            publishDate: "05/22/2104"
        },
        {
            id: 2,
            title: "Writing a blog in Ember",
            content: "I am writting a blog",
            publishDate: "05/22/2104"
        }
    ]
});

export default Post;

路由器.js

var Router = Ember.Router.extend({
  location: ENV.locationType
});

Router.map(function() {
    this.resource('posts', { path: '/' });
});

export default Router;

路由/index.js

export default Ember.Route.extend({
    model: function() {
        return this.store.find('post');
    }
});

控制器/posts.js

var PostsController = Ember.ArrayController.extend({

});

export default PostsController;

模板/posts.hbs

<p>Test</p>
<ul>
    {{#each}}
        <li>
            {{title}}
        </li>
    {{/each}}
</ul>

我认为这个问题是 ember-cli 特有的。我之前有使用 Ember App Kit 的固定装置,但想使用 ember-cli。我添加了适配器,并尝试更改声明装置的方式:

适配器/post.js

var PostAdapter = DS.FixtureAdapter.extend({});

export default PostAdapter;

已更改模型/post.js

var Post = DS.Model.extend({
    title: DS.attr('string'),
    content: DS.attr('string'),
    publishDate: DS.attr('date')
});

Post.FIXTURES = [
        {
            id: 1,
            title: "Writing a blog in Ember",
            content: "I am writting a blog",
            publishDate: "05/22/2104"
        },
        {
            id: 2,
            title: "Writing a blog in Ember",
            content: "I am writting a blog",
            publishDate: "05/22/2104"
        }
    ];

export default Post;

这仍然不起作用。 Ember 检查器显示具有正确字段(id、标题、内容发布日期)但没有实际数据的帖子。

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    我需要将我的夹具适配器添加到:

    适配器/application.js

    export default DS.FixtureAdapter.extend({});
    

    然后它使用了reopenClass 版本的fixtures:

    模型/post.js

    var Post = DS.Model.extend({
        title: DS.attr('string'),
        content: DS.attr('string'),
        publishDate: DS.attr('date')
    });
    
    Post.reopenClass({
        FIXTURES: [
            {
                id: 1,
                title: "Writing a blog in Ember",
                content: "I am writting a blog",
                publishDate: "05/22/2104"
            },
            {
                id: 2,
                title: "Writing a blog in Ember",
                content: "I am writting a blog",
                publishDate: "05/22/2104"
            }
        ]
    });
    
    export default Post;
    

    【讨论】:

    • 使用reopenClass是正确的方法,而不是上面选择的答案。见edgycircle.com/blog/…
    • 我在使用 ember-cli 设置灯具时犯的错误:忘记添加灯具适配器,尝试使用.FIXTURES 而不是reopenClass,忘记.find 模型(我在印象ember(ember-data?)可以在标准情况下自动提供模型)。我认为有两件事会让这更容易:生成器应该为路由提供一个默认模型,并且应该有一个用于 ember-cli 的夹具生成器。
    【解决方案2】:

    除了上面的reopenClass方法调用,你还需要在你的Brocfile.js添加EmberData的import

    你可以这样做:

    app.import({
      development: 'vendor/ember-data/ember-data.js',
      production:  'vendor/ember-data/ember-data.prod.js'
    }, {
      'ember-data': [
        'default'
      ]
    });
    

    感谢这篇精心整理的帖子帮助我实现了这一点:http://www.blakeerickson.com/posts/2014/06/17/ember_cli_todomvc_tutorial

    【讨论】:

    • 如果您只想使用夹具进行测试,为什么还需要添加ember-data
    • 我已经有一段时间没有在 Ember 中使用了(并且在我这样做时没有深入了解),但是 FIXTUREADAPTER 是 ember-data 的一部分。上面在 ember-cli 中为我修复了它,当时是 ~v0.0.36。认为他们最近以公平的方式移动了 ember-cli(现在看起来是 v0.1.2),所以事情可能已经改变了。
    • 你说得对,我很困惑:fixtures是ember-data支持的适配器之一。
    【解决方案3】:

    接受的答案是正确的方法,但是你可以用 ember-cli 的方式生成文件:

    ember g adapter application
    

    它生成:

    installing adapter
      create app/adapters/application.js
    installing adapter-test
      create tests/unit/adapters/application-test.js
    

    【讨论】:

      【解决方案4】:

      你需要将fixture定义为:

      Post.FIXTURES = [
              {
                  id: 1,
                  title: "Writing a blog in Ember",
                  content: "I am writting a blog",
                  publishDate: "05/22/2104"
              },
              {
                  id: 2,
                  title: "Writing a blog in Ember",
                  content: "I am writting a blog",
                  publishDate: "05/22/2104"
              }
      ];
      

      您还必须设置 ApplicationAdapter:

      App.ApplicationAdapter = DS.FixtureAdapter;
      

      这里是http://emberjs.jsbin.com/yutas/1/editguide section 的示例。

      【讨论】:

      • 我尝试将其更改为那个并添加了一个夹具适配器(编辑了问题),但仍然没有运气。您展示的方式适用于 ember app kit,但我正在尝试使用 cli。我想保留 cli 提供的文件夹结构和模块,而不是将所有内容都放在一个 js 文件中。
      • 在响应中添加了 ApplicationAdapter 设置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多