gpt4 book ai didi

javascript - 在 Backbone 中绑定(bind)时防止函数被调用两次?

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

当我的 Backbone 模型中的两个属性(“a”或“b”)中的任何一个发生变化时,我想计算第三个属性“c”:

initialize: function() {
this.bind("change:a", this.calculateC);
this.bind("change:b", this.calculateC);
},

calculateC: function() {
this.attributes.c = ...
}

如果模型上同时设置了 a 和 b,有什么好方法可以防止 c 被计算两次?

最佳答案

这些属性不会同时设置,它们将一次设置一个,因此您需要查看这两个事件。 relevant code looks like this :

// Set a hash of model attributes on the object, firing `"change"` unless you
// choose to silence it.
set : function(attrs, options) {
// ...

// Update attributes.
for (var attr in attrs) {
var val = attrs[attr];
if (!_.isEqual(now[attr], val)) {
now[attr] = val;
// ...
if (!options.silent) this.trigger('change:' + attr, this, val, options);
}
}

// Fire the `"change"` event, if the model has been changed.
if (!alreadyChanging && !options.silent && this._changed) this.change(options);

您可以看到其中一个属性被设置,然后触发其更改事件,然后对下一个属性重复该过程。如果您只需要一个事件,那么您应该只绑定(bind)到整个模型的更改事件。

为了完整起见,我应该提到 Model#set 的接口(interface)文档没有指定关于何时触发各个更改事件的任何特定行为,它只是说它们将被触发。

关于javascript - 在 Backbone 中绑定(bind)时防止函数被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871985/

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