Backbone.js-在创建模型时更正要绑定的事件
我有一个绑定到notes集合的add事件的主干视图(使用CoffeeScript): 下面是添加的便笺方法和添加OneNote方法,用于将最近创建的便笺添加到DOM中:Backbone.js-在创建模型时更正要绑定的事件,backbone.js,backbone-events,Backbone.js,Backbone Events,我有一个绑定到notes集合的add事件的主干视图(使用CoffeeScript): 下面是添加的便笺方法和添加OneNote方法,用于将最近创建的便笺添加到DOM中: addOneNote: (note) => view = new CrmBliss.Views.Consultants.NoteView({model: note}) @$(".past_notes").prepend view.render().el noteAdded: (mo
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将使用反映数据库中添加内容的模型调用。有一些字段是为模型返回的,这些字段不是由客户机插入的,而是由服务器计算的。也就是说,在处创建的和用户名是服务器将返回的方法,但客户端在从服务器获取之前不知道这些方法
因此,当我尝试渲染以下(eco)模板时:
<div class="note">
<span class="date"><%= @created_at %></span>
by
<span class="taker"><%= @user_name %></span>
<div class="note_body">
<%= @body %>
</div>
</div>
这让我意识到我显然绑定到了错误的事件,我应该绑定到从服务器加载模型时调用的事件
我应该绑定到哪个事件,当调用该事件时,它具有正确的(和最终的)模型属性?您好,很难回答您的问题,因为这可能是由于错误的设计决策导致的代码气味。而且,我认为问题在于实例化新模型的方式,而不是从该模型创建视图的方式。那么,如何创建新模型呢?(从哪个角度看,在哪个事件之后,代码是什么)。理论上,最好的方法可能是等到模型准备好后再将其插入收藏。然后,
add
事件将像您预期的那样工作。@SimonBoudrias我如何知道模型是否准备就绪?@SimonBoudrias我没有将我的模型添加到集合中。相反,我创建了一个新模型,并绑定到集合上的add
事件。如果您收听集合上的add
事件,那么您将在某个时刻将新模型添加到集合中。然后,您只需要在模型完成从服务器获取数据后添加它。
<div class="note">
<span class="date"><%= @created_at %></span>
by
<span class="taker"><%= @user_name %></span>
<div class="note_body">
<%= @body %>
</div>
</div>
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)