Другой способ справиться с этим обещанием?

Вот немного кофе, но не стесняйтесь отвечать в javascript:

model = new MyModel content: content
model.save()
@collection.add model

В другом месте вид слушает add событие в коллекции…

_addOne: (model, collection, options)=>
  view = new MyView model: model
  @subviews[model.id] = view

Иногда модель не заканчивала общаться с сервером, поэтому у нее не было id и этот код не смог сделать то, что хотел. Итак, я завернул save в обещании, используя библиотеку when.js (when сопоставлен с When Вот)

When model.save()
  .then =>
    @collection.add model

Теперь все в порядке с миром. Мне интересно, есть ли способ получить then в _addOne метод, потому что это то, что действительно ждет, сама коллекция не против того, чтобы к ней добавили полусгоревшую модель.

Если бы кто-нибудь мог показать мне или указать мне правильное направление, я был бы очень благодарен.

1 ответ

Решение

Использование Collection#create вместо:

createcollection.create (атрибуты, [параметры])

Удобство для создания нового экземпляра модели в коллекции. Эквивалентно созданию экземпляра модели с хешем атрибутов, сохранению модели на сервере и добавлению модели в набор после ее успешного создания. [...] Проходить {wait: true} если вы хотите подождать сервера, прежде чем добавлять новую модель в коллекцию.

Итак, если вы сделаете это:

@collection.create(
  { content: content }
  { wait: true }
)

Тогда модель не будет добавлена ​​в коллекцию, пока сервер не ответит, и модель получит свой сервер. id тогда.

Другие вопросы по тегам