【问题标题】:A different way of handling this promise?处理这个承诺的不同方式?
【发布时间】:2013-11-16 17:01:04
【问题描述】:

这里有一点coffeescript,但请随时用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,并且此代码无法执行所需的操作。所以,我使用 when.js 库将save 包装在一个promise 中(when 在这里映射到When

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

现在世界上的一切都是笨拙的。我想知道的是,有没有办法让then 进入_addOne 方法,因为那是真正等待的位,集合本身不介意半生不熟模型添加到它。

如果有人能告诉我或指出正确的方向,我将不胜感激。

【问题讨论】:

  • @SLaks 我不知道该怎么做——我可以在When 中包装属性吗?我仍然对整个承诺的事情有所了解。

标签: javascript backbone.js coffeescript promise when-js


【解决方案1】:

改用Collection#create

createcollection.create(attributes, [options])

方便在集合中创建模型的新实例。相当于实例化一个带有属性哈希的模型,将模型保存到服务器,创建成功后将模型添加到集合中。 [...] 如果您想在将新模型添加到集合之前等待服务器,请传递 {wait: true}

如果你这样做:

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

在服务器响应之前,模型不会被添加到集合中,届时模型将拥有服务器提供的id

【讨论】:

  • 谢谢,这当然是更好的做事方式。
猜你喜欢
  • 2018-11-18
  • 1970-01-01
  • 2020-03-19
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 2018-04-30
相关资源
最近更新 更多