如何处理从backbone.js中的collection.create()触发的多个无效事件
How to handle multiple invalid events being fired from collection.create() in backbone.js
我正在使用集合添加一个模型。创建方法。我已经重写了模型。方法和错误窗口弹出,我得到正确的错误消息。
一切似乎都很顺利,直到我第三次或第四次点击保存按钮。对于之前的每个无效模型,都会触发无效事件。我注意到,当无效事件触发时,集合本身并没有清理,所以我添加了一行model.collection.pop(),希望能解决这个问题。
无效事件仍然被触发n次。N是我尝试创建新模型的次数,直到我重新加载应用程序。我发现,如果传入的模型有一个集合对象,我应该只显示错误消息。现在一切正常,但这似乎有点不正常。
我尝试在无效事件方法中添加model. stoppllistening()。不过运气不好。我认为这与我没有完全清理这些部分或无效的模型有关。
createNewAsset: (event) ->
@collection.on "invalid", (model, error) =>
console.log "invalid fired"
unless model.collection is undefined
errView = new MyApp.Views.Error(collection: error)
$("body").append(errView.render().el)
model.collection.pop()
@collection.on "sync", ->
Backbone.history.navigate("assets", true)
@collection.create
name: @$el.find("#new_asset_name").val()
澄清更新:
以上代码适用于最终用户,但我有一些僵尸模型或集合触发n个事件。N为用户点击保存按钮的次数
我不认为你的问题是你有流浪模型,你的问题是你绑定一个新的匿名"invalid"
回调到集合每次createNewAsset
被调用。
你应该只绑定你的"invalid"
和"sync"
处理程序一次在initialize
:
initialize: ->
# You could still use anonymous functions here.
@listenTo(@collection, 'invalid', @bad_model)
@listenTo(@collection, 'sync', @synced)
#...
bad_model: (model, error) ->
console.log('invalid fired')
#...
synced: ->
Backbone.history.navigate('assets', true)
然后你的createNewAsset
变成这样:
createNewAsset: (event) ->
@collection.create
name: @$('#new_asset_name').val()
我还将您的@$el.find()
切换为@$()
,这是@$el.find
的标准内置快捷方式。
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 按键事件无效的原因
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 为左键或右键单击附加事件侦听器-onclick'右键单击无效
- 为什么document.ready中的事件处理程序函数有效但无效;取出后不起作用
- 捕获事件或异常“无效表单控件”
- 尝试在状态“root.loaded.saved”中处理事件“成为无效”
- 在项视图中不会触发无效的模型事件
- onKeyUp事件(无效)
- Hammer.js:滑动事件对图像无效
- 为什么在使用事件冒泡时没有调用无效事件的事件侦听器
- Return false对第二个onclick切换事件无效
- 输入字段模糊时,验证字段,如果无效则取消模糊事件
- onblur事件不'如果用户在文本字段中输入值并直接按下浏览器刷新按钮,则无效
- 为什么jquery点击事件在plunker中有效,但在任何浏览器中都无效
- 如何处理从backbone.js中的collection.create()触发的多个无效事件
- Onhashchange事件导致无效的标记验证
- Firebase child_added事件返回无效路径错误