10

我正在使用 EmberJS 1.0.0 和 Ember Data 1.0.0 beta 和最新版本的LocalStorage Adapter。当我尝试从商店加载具有 hasMany 关系的记录时,出现以下错误:

ember-1.0.0.js(第 394 行)

断言失败:您在 'App.List:ember236:1' 上查找了 'items' 关系,但未加载一些相关记录。确保它们都与父记录一起加载,或者指定关系是异步的 (DS.attr({ async: true }))

和 ember-data.js(第 2530 行)

TypeError: resolver is undefined }).then(resolver.resolve, resolver.reject);

快速演示应用程序:http: //jsbin.com/oKuPev/49(观看控制台)

<script type="text/x-handlebars">      
    List: {{name}}       
    <div>    
        {{#each items}}
            {{id}} - {{name}}<br/>
        {{/each}}
    </div>
</script>

<script type="text/javascript">

    window.App = Ember.Application.create({});        
    App.ApplicationAdapter = DS.LSAdapter.extend({});

    var FIXTURES = {
      'App.List': {
        records: {
          '1': { id: '1', name: 'The List', items: ['1','2'] }
        }
      },
      'App.Item': {
        records: {
          '1': { id: '1', name: 'item 1', list: '1' },
          '2': { id: '2', name: 'item 2', list: '1' }
        }
      }
    }

    // Store fixtures in localStorage
    localStorage.setItem('DS.LSAdapter', JSON.stringify(FIXTURES));

    // Models
    App.List = DS.Model.extend({
        name: DS.attr('string'),
        items: DS.hasMany('item')
    });  

    App.Item = DS.Model.extend({
        name: DS.attr('string') ,
        list: DS.belongsTo('list')
    });


    // Route  
    App.ApplicationRoute = Ember.Route.extend({    
        model: function() {
          // Fails!!!
          return this.store.find('list', 1);           
        }
    });       

  </script>      

我不确定问题是 ember.js、ember-data.js 还是 LocalStorage 适配器。

4

3 回答 3

16

您需要将模型上的“项目”定义为本质上是异步的,因为 ember 对这些模型发出单独的请求,然后将它们异步连接在一起。

App.List = DS.Model.extend({
  name: DS.attr('string'),
  items: DS.hasMany('item',{async:true})
}); 
于 2013-09-10T03:19:28.460 回答
3

如果您定义items为异步关系,则此方法有效。

item: DS.hasMany('item',{async:true})

这是一个有效的 jsbin:http: //jsbin.com/oKuPev/53/edit

于 2013-09-10T04:23:37.580 回答
0

任何其他偶然发现此线程 b/c 关联的人都没有加载(但没有错误),请注意items: [1, 2]将父记录关联到子记录。

于 2013-12-02T00:10:31.150 回答