Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js-在创建模型时更正要绑定的事件_Backbone.js_Backbone Events - Fatal编程技术网

Backbone.js-在创建模型时更正要绑定的事件

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

我有一个绑定到notes集合的add事件的主干视图(使用CoffeeScript):

下面是添加的便笺方法和添加OneNote方法,用于将最近创建的便笺添加到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将使用反映数据库中添加内容的模型调用。有一些字段是为模型返回的,这些字段不是由客户机插入的,而是由服务器计算的。也就是说,在处创建的用户名是服务器将返回的方法,但客户端在从服务器获取之前不知道这些方法

因此,当我尝试渲染以下(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)