gpt4 book ai didi

javascript - 如何处理从backbone.js中的collection.create()触发的多个无效事件

转载 作者:行者123 更新时间:2023-12-02 18:44:36 25 4
gpt4 key购买 nike

我正在使用 collection.create 方法添加模型。我已经重写了 model.validate 方法,并且弹出错误窗口,我得到了正确的错误消息。

一切似乎都很顺利,直到我第四次点击保存按钮为止。对于之前的每个无效模型,都会触发无效事件。我注意到当无效事件触发时,集合没有自行清理,因此我添加了 model.collection.pop() 行,希望能解决这个问题。

无效事件仍会被触发 n 次。 N 是我在重新加载应用程序之前尝试创建新模型的次数。我发现只有在传入的模型上有集合对象时才应该显示错误消息。现在一切正常,但这似乎有点不稳定。

我尝试在无效事件方法中添加 model.stopListening() 。但运气不好。我认为这与我没有完全清理这些部分或无效模型有关。

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 是用户单击保存按钮的次数。

最佳答案

我不认为你的问题是你有杂散模型,你的问题是你每次createNewAsset都会将一个新的匿名“invalid”回调绑定(bind)到集合中code> 被调用。

您应该在 initialize 中绑定(bind)一次 "invalid""sync" 处理程序:

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 - 如何处理从backbone.js中的collection.create()触发的多个无效事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16533169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com