Ember数据存储从FIXTURES返回未定义的记录

时间:2014-08-19 12:04:19

标签: javascript html5 ember.js single-page-application

我是ember的新手,我想简单地获取Fixtures模型存储的项目的日志,但我不能。这就是我所做的:

app.js

    App = Ember.Application.create();

    App.Store = DS.Store.extend({
        adapter: DS.FixtureAdapter.extend()
    });

    App.Documenter = DS.Model.extend({
        firstName: DS.attr('string'),
        lastName: DS.attr('string')
    });

    App.Documenter.FIXTURES = [
      { id: 1, firstName: 'Trek', lastName: 'Glowacki' },
      { id: 2, firstName: 'Tom', lastName: 'Dale' }
    ];


App.IndexRoute = Ember.Route.extend({
    controllerName: 'application',
    actions: {
        addtostore: function () {
        },
        displaystore: function () {
             var obj =  this.store.all('documenter');
            console.log(obj.objectAt(0).firstName); //here i get undefined

        }
    }

});

HTML:

<script type="text/x-handlebars">
    <h2> Ember POC</h2>
    <p>POC</p>
    {{outlet}}
     <button {{action 'displaystore'}}>TestButton</button>
</script>

我已经在stackoverflow上看了几个答案: Ember-Data Fixture Adapter Ember App Kit with ember data

但我仍然不知道,为什么按钮TestButton不会登录到控制台。我尝试了很多方法,但总是未定义

2 个答案:

答案 0 :(得分:4)

无需定义商店,您的适配器应如此定义:

App.ApplicationAdapter = DS.FixtureAdapter;

并且all仅返回已找到并位于商店中的记录。 FIXTURES哈希不会自动加载到商店中,您仍然需要使用find才能从FIXTURES哈希中获取记录。

displaystore: function () {
    this.store.find('documenter').then(function(records){ // this is async
      console.log(records.get('firstObject.firstName'));
    });
}

您是否愿意从这样的操作中拨打find,因为它每次都会回拨给服务器,通常您会在路线(甚至可以在路线中填充您的商店,以便您可以使用all)。

答案 1 :(得分:0)

因为我在Ember很新鲜,所以我犯了一些常见的错误。我不明白路线,把手等等,我搞砸了。问题是我没有将模型分配给控制器。

App.IndexRoute = Ember.Route.extend({
    model: function () {
        var store = this.get('store');
        return store.findAll('documenter');
    }
});