2013-09-09 5 views
10

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

уголька-1.0.0.js (линия 394)

Assertion failed: You looked up the 'items' relationship on 'App.List:ember236:1' but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (DS.attr({ async: true }))

и Эмбер-data.js (Line 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>  

Я не сюр e, если проблема связана с ember.js, ember-data.js или адаптером LocalStorage.

ответ

16

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

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

Спасибо. Раньше я пытался это сделать, но по какой-то причине это тоже не сработало. Теперь это сработало, но я все равно использую Ember Model. – Alex

+7

Где я могу узнать больше об асинхронном параметре? Я не могу найти его в документах данных ember? – gucki

+0

Пришел сюда для более подробного объяснения параметра 'async'. Не могу найти ничего относительно того, что это на самом деле делает. – Feech

3

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

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

Вот рабочий jsbin: http://jsbin.com/oKuPev/53/edit

+2

Это правильная ссылка для JSBin? Кажется, что не отображается правильный код. Любезно подтвердить. Благодаря! – user2431285

0

Кто-нибудь еще, что спотыкается на эту тему B/C ассоциация не загружается (но без ошибки) обратите внимание на items: [1, 2] которая связывает родитель дочерние записи.

Смежные вопросы