gpt4 book ai didi

javascript - Backbone.js 模型事件未触发

转载 作者:行者123 更新时间:2023-12-02 20:01:00 25 4
gpt4 key购买 nike

我有以下 View 文件:

var BucketTransferView = Backbone.View.extend(
{
initialize: function(args)
{
_.bindAll(this);
this.from_bucket = args.from_bucket;
this.to_bucket = args.to_bucket;
},
events:
{
'click input[type="submit"]' : 'handleSubmit',
},
render: function()
{
$(this.el).html(ich.template_transfer_bucket(this.model.toJSON()));
return this;
},
handleSubmit: function(e)
{
that = this;

this.model.save(
{
date: 1234567890,
amount: this.$('#amount').val(),
from_bucket_id: this.from_bucket.get('id'),
to_bucket_id: this.to_bucket.get('id')
},
{
success: function()
{
// recalculate all bucket balances
window.app.model.buckets.trigger(
'refresh',
[that.to_bucket.get('id'), that.from_bucket.get('id')]
);
}
}
);
$.colorbox.close();
}
});

我的存储桶集合有以下刷新方法:

refresh: function(buckets)
{
that = this;
_.each(buckets, function(bucket)
{
that.get(bucket).fetch();
});
}

我的问题是,当 fetch() 发生并更改集合的模型时,它不会触发具有相同模型的其他 View 类中的更改事件。 View 的模型具有相同的 cid,所以我认为它会触发。

为什么没有发生这种情况?

最佳答案

Fetch 将创建新的模型对象。任何与集合绑定(bind)的 View 都应该绑定(bind)到集合的重置事件并重新渲染自身。 View 的模型仍将具有相同的 cid,因为它们保存了对旧版本模型的引用。如果您查看 buckets 集合,它可能具有不同的 cid。

我的建议是在渲染存储桶的 View 中,您应该渲染所有 subview 并保留对这些 View 的引用。然后在重置事件中,删除所有 subview 并重新渲染它们。

initialize: function()
{
this.collection.bind('reset', this.render);
this._childViews = [];
},

render: function()
{
_(this._childViews).each(function(viewToRemove){
view.remove();
}, this);

this.collection.each(function(model){
var childView = new ChildView({
model: model
});
this._childViews.push(childView);
}, this)
}

我希望这对您有用,或者至少让您朝着正确的方向前进。

关于javascript - Backbone.js 模型事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8004258/

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