Определение buildURL в зависимости от того, какие свойства изменились


Я хотел бы переопределить свой buildURL в зависимости от того, какие свойства изменились на той же модели. Например, если статус изменился, я хотел бы перейти на определенный маршрут, а если изменился субпользователь, я хотел бы перейти на другой маршрут.

Пример:

this.store.find('conversation', conv.id).then(function(conversation){
    conversation.set('status', 'opened');
    conversation.save();                    
});

Это будет использовать определенный маршрут PUT и это:

this.store.find('conversation', this.get('selectedConv').id).then(function(conversation){
    conversation.set('subuser', subuser);
    conversation.set('url', subuser.get('email'));
    conversation.save();
});

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

1 2

1 ответ:

Вам нужно настроить свой адаптер conversation, в частности метод urlForUpdateRecord.

Исходный метод выглядит следующим образом:

urlForUpdateRecord: function(id, modelName, snapshot) {
  return this._buildURL(modelName, id);
},

В этом методе необходимо изучить снимок и соответствующим образом настроить URL-адрес.

В последней версии Ember Data было введено свойствоchangedAttributes . Похоже, это то, что вам нужно.

Удачи!