EmberJS - запись с hasMany отношением не загружается - программирование
Подтвердить что ты не робот

EmberJS - запись с hasMany отношением не загружается

Я использую EmberJS 1.0.0 с бета-версией Ember Data 1.0.0 и последней версией адаптера LocalStorage. Когда я пытаюсь загрузить запись с hasMany отношения из магазина, я получаю следующую ошибку:

ember-1.0.0.js(строка 394)

Утверждение не выполнено: вы просмотрели отношения "позиции" на 'App.List: ember236: 1', но некоторые из связанных записей не были загружен. Либо убедитесь, что все они загружены вместе с родительским запись или указать, что отношение равно async (DS.attr({async: true}))

и ember-data.js(строка 2530)

TypeError: resolver undefined}), затем (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.

4b9b3361

Ответ 1

Вам нужно определить "элементы" в вашей модели как асинхронные по своей природе, поскольку ember делает отдельные запросы для этих моделей, а затем присоединяет их вместе асинхронно.

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

Ответ 2

Это работает, если вы определяете items как асинхронное отношение.

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

Здесь работает jsbin: http://jsbin.com/oKuPev/53/edit

Ответ 3

Любой, кто наткнулся на эту ассоциацию нитей b/c, не загружается (но без ошибки) замечает items: [1, 2], который связывает родителя с дочерними записями.