Javascript 主干线“;加上「;及;更新;事件混乱

Javascript 主干线“;加上「;及;更新;事件混乱,javascript,events,backbone.js,marionette,Javascript,Events,Backbone.js,Marionette,从Backbone.js(1.2.3)文档中: 添加集合。添加(型号,[选项]) 将模型(或模型数组)添加到集合中,触发“添加” 事件,以及之后的“更新”事件 在我的代码中,我想向集合中添加一个新模型(),然后强制将焦点放在已创建卡片的输入上。我不确定这是否是正确的方法,但我基本上会听到当模型添加到集合中时触发的事件,并触发另一个事件,这有助于从已创建模型的角度集中精力: # ItemView initialize: -> App.vent.on "focus:field

从Backbone.js(1.2.3)文档中:

添加集合。添加(型号,[选项])

将模型(或模型数组)添加到集合中,触发“添加” 事件,以及之后的“更新”事件

在我的代码中,我想向集合中添加一个新模型(),然后强制将焦点放在已创建卡片的输入上。我不确定这是否是正确的方法,但我基本上会听到当模型添加到集合中时触发的事件,并触发另一个事件,这有助于从已创建模型的角度集中精力:

# ItemView
initialize: ->
    App.vent.on "focus:field", =>
        $("div.card:last").addClass("edit")
        @$el.find("input:first").focus()
当我收听
更新
事件时,它按预期工作:
:选择最后一张
卡(新型号),并聚焦输入

但是,当我听
add
事件时,
initialize
函数会在倒数第二个模型而不是新模型上激发。新模型仍在创建中,但
编辑
类和焦点将强制在之前的模型上

为什么会这样

为此,我会使用
update
事件,但对我来说不幸的是
model.destroy
方法也会触发
update
事件,因此它会导致UI被破坏,如果我通过
model.destroy
使用
silient:true
总的来说会发生不好的事情。有解决办法吗

相关代码:

# CompositeView
class List.Models extends App.Views.CompositeView
    template: "path/to/template"
    childViewContainer: "div.destination"
    childView: List.Model
    events: 
        "click #add-model": "addModel"

    initialize: ->
        @listenTo @collection, "update", ->
            App.vent.trigger "focus:field"

    addModel: (e) ->
        @$el.find("#add-model").prop "disabled", true
        model = App.request "new:model:entity"
        @collection.add(model)

# ItemView
class List.Model extends App.Views.ItemView
    template: "path/to/template"

    initialize: ->
        App.vent.on "focus:field", =>
            $("div.card:last").addClass("edit")
            @$el.find("input:first").focus()
编辑: 显然,
add
update
事件之间的区别在于,
add
事件在调用
@collection.add(model)
之后立即触发,但在将新模型插入DOM之前,导致
$(“div.card:last”)
选择器指向倒数第二个视图。但我不确定,也许更有经验的人可以澄清这是否属实。在为App.vent的执行添加超时后,我得出了以下结论:

initialize: ->
    delay = (ms, func) -> setTimeout func, ms
    # Triggered via add event
    App.vent.on "focus:field", =>
        delay 100, =>
            $("div.card:last").addClass("edit")
            $("input:first").focus()

初始化函数在倒数第二个模型上激发。。倒数第二种模式是什么?你能发布所有相关代码吗?@hindmost,请看一下这个,它说明了我所说的倒数第二个模型。谢谢你的回复,还不清楚。此外,我在那里没有看到任何主干代码。@后来,我用更多的代码更新了这个问题。@Guidle_gudleif“但在将新模型插入DOM之前”-主干不会在DOM中插入任何内容。你应该自己做。因此,在创建与新模型对应的新元素时,很容易将其设置为焦点。