0

我有一个 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_atuser_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)

这让我觉得我显然绑定到了错误的事件,并且我应该绑定到从服务器加载模型时调用的事件。

我应该绑定哪个事件,当被调用时,它具有正确的(和最终的)模型属性?

4

0 回答 0