2014-02-10 7 views
0

У меня есть две модели, User и Project:объекты HasMany исчезают после перезагрузки

App.Project = DS.Model.extend({ 
       name: DS.attr('string'), 
       url: DS.attr('string'), 
       user: DS.belongsTo('user') 
      }); 

App.User = DS.Model.extend({ 
       name: DS.attr('string'), 
       projects: DS.hasMany('project') 
      }); 

Я использую локальное хранилище для Ember данных для хранения пользователей и проектов. Я заселение пользователей и проектов с использованием AJAX звонки в IndexController:

'createUser' : function(){ 
          var name = this.get('newUser'); 
          if(!name){ 
           return; 
          } 

          var that = this; 

          Ember.$.getJSON('<apiUrl>).then(function(data){ 
           var user = that.store.createRecord('user', data); 
           user.save(); 
           that.set('newUser', ''); 
           Ember.$.getJSON(<apiUrl>/projects').then(function(data){ 
             var length = data.length; 
             for(var i = 0; i < length; i++){ 
              data[i].id = data[i].name; 
              data[i].user_id = data.id; 
              var project = that.store.createRecord('project', data[i]); 
              project.save(); 
              user.get('projects').addObject(project); 
             } 

             user.save(); 
           }); 
          }); 
         }, 

     } 

Когда я иду в URL для пользователя, проекты отображаются корректно. Однако, когда я перезагружаю страницу, проекты исчезают и больше не отображаются. Мой взгляд на проекты это (внутри шаблона пользователя):

{{#each projects}} 
      <div class="row"> 
      <a {{bind-attr href="url"}}>{{name}}</a> 
      </div> 
      {{else}} 
       <p>No projects loaded</p> 
      {{/each}} 

Я делаю что-то неправильно, что вызывает проекты не перезагружаются?

ответ

0

Я нашел ответ на этот вопрос here. Чтобы получить эту работу, мне нужно было вновь открыть JSONSerializer:

DS.JSONSerializer.reopen({ 
    serializeHasMany : function(record, json, relationship) { 
     var key = relationship.key; 

     var relationshipType = DS.RelationshipChange.determineRelationshipType(
       record.constructor, relationship); 

     if (relationshipType === 'manyToNone' 
       || relationshipType === 'manyToMany' 
       || relationshipType === 'manyToOne') { 
      json[key] = Ember.get(record, key).mapBy('id'); 
     } 
    } 
}); 
Смежные вопросы