Разница между model.save() и model.get('store'). Commit()

В чем разница между

// 'this' is the controller
this.get('model').save();

и

// 'this' is the controller
this.get('model').get('store').commit();

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

Я посмотрел на первый, и он называет

DS.Model = Ember.Object.extend(
  ...
  save: function() {
    this.get('store').scheduleSave(this);

    var promise = new Ember.RSVP.Promise();

    this.one('didCommit', this, function() {
      promise.resolve(this);
    });

    return promise;
  }, 

Итак, тогда возникает вопрос, какое основное различие между this.get('store').scheduleSave(this) и this.get('store').commit()?

DS.Store = Ember.Object.extend(DS._Mappable, {
  ...
  scheduleSave: function(record) {
    get(this, 'currentTransaction').add(record);
    once(this, 'flushSavedRecords');
  },
  ...
  /**
    This method delegates committing to the store implicit
    transaction.

    Calling this method is essentially a request to persist
    any changes to records that were not explicitly added to
    a transaction.
  */
  commit: function() {
    get(this, 'defaultTransaction').commit();
  },

Я не уверен, какой из них лучше. Я склоняюсь к save(), потому что он, кажется, обертывается вокруг магазина.

(я не смог найти этот код на github, не знаю, является ли версия github или amazonaws emberjs последней. Вот аналогичные версии в github: model save(), который вызывает store scheduleSave() и сохранить commit())

Ответ 1

Какой я должен использовать?

Я бы рекомендовал использовать this.get('model').save()

какое основное различие между this.get('store').scheduleSave(this) и this.get('store').commit()?

Если вы сохраняете много записей во время одного и того же цикла выполнения, scheduleSave будет выполнять пакетные изменения, так что несколько записей будут сохранены в одной транзакции. В некоторых случаях commit может привести к сохранению изменений в других записях.