Подтвердить что ты не робот

Динамически добавлять объект js к массиву модели в 1.13

У меня есть следующий код:

var msg = this.store.createRecord({text:'first title', createdAt: "2015-06-22T20:06:06+03:00" })

this.get('model.content').pushObject(msg);

msg.save();

Мы создаем новую запись. Затем вставьте его в модель для отображения. Он отлично работал в версии 1.9, но после обновления до новейшего 1.13 он разбивается и показывает эту ошибку:

TypeError: internalModel.getRecord не является функцией

после некоторых исследований я пришел к этому решению

this.get('messages.content').unshiftObject(message.internalModel);

и это частично помогает. Теперь у меня две проблемы:

  • Я не уверен, что использование частных данных ember api - хорошая идея.
  • У меня есть раздражающая задержка между добавлением записи в модель и визуализируя его на экране. Более того, если я не позвоню msg.save(); запись не отображается. Итак, насколько я понял до тех пор, пока у нас не будет ответа от сервера, и только тогда это сделает. Но мне нужно противоположное поведение - мне нужно сначала показать запись и затем сохраните его (показывая состояние сохранения для пользователя), таким образом пользователь думает, что все идет очень быстро.
4b9b3361

Ответ 1

Одним из возможных решений, не прибегая к частному API, является использование toArray() (github issue):

var array = this.get('messages').toArray()
array.addObjects(this.get('messages'))
array.addObject(msg)
this.set('messages', array)

Ответ 2

До 1.13:

this.get('content').pushObjects(messages);

После 1.13:

messages.forEach(functio(message) {
  this.get('model.content').pushObject(message._internalModel);
}); 

Ответ 3

Я бы сделал все возвращаемые модели массивом, добавив массив в этот массив

setPeople:function(){
    this.set('people',this.get('content').toArray())
}.observes('content')

тогда найдите больше персональных моделей, в массив

getMoreUsers(){
      var self = this;
            this.set('offset', this.get('offset')+1);
            self.store.findAll('person').then(function(people){
             self.get('people').pushObjects(people.toArray());
            });