我有一个 Backbone 视图,它绑定到这样的笔记集合的添加事件(使用 CoffeeScript):
initialize: () ->
@options.notes.bind('add', @noteAdded)
这里是noteAdded方法和addOneNote方法,用于将最近创建的笔记添加到 DOM:
addOneNote: (note) =>
view = new CrmBliss.Views.Consultants.NoteView({model: note})
@$(".past_notes").prepend view.render().el
noteAdded: (model, response) =>
console.debug 'model', model.toJSON()
@addOneNote(model)
最后,这是我在集合上调用create方法的方式:
saveNote: (e) =>
id = @model.get('id')
body = @$('.note-body').val()
@options.notes.create({ body: body, consultant_id: id })
我希望noteAdded会使用反映数据库中添加内容的模型来调用。模型返回的一些字段不是由客户端插入的,而是由服务器计算的。即,created_at和user_name是服务器将返回的方法,但客户端在从服务器获取之前并不知道这些方法。
因此,当我尝试渲染以下(生态)模板时:
<div class="note">
<span class="date"><%= @created_at %></span>
by
<span class="taker"><%= @user_name %></span>
<div class="note_body">
<%= @body %>
</div>
</div>
仅渲染主体(因为用于创建便笺的对象已经具有主体属性)。
如果我将noteAdded方法更改为在插入注释之前稍等片刻,它会起作用:
noteAdded: (model, response) =>
console.debug 'note before', model.toJSON()
console.debug 'model', model
attrShow = =>
console.debug 'after time', model.toJSON()
@addOneNote(model)
setTimeout(attrShow, 1000)
这让我觉得我显然绑定到了错误的事件,并且我应该绑定到从服务器加载模型时调用的事件。
我应该绑定哪个事件,当被调用时,它具有正确的(和最终的)模型属性?