javascript - 如何强制调用模型事件

标签 javascript backbone.js

我写了一个函数,只要模型属性发生变化就会触发它,如下所示。

modelEvents:{
  "change:Name":"callback1"
},
callback1:function(){
  console.log("This is testing");
}

最初我设置了 model.set("Name","hi") 以便自动调用 callback1 。再次,如果我在模型中设置相同的值,则 callback1 不会触发,因为模型属性未修改。所以为此每次我都会在下面做。

model.set({"Name":""},{silent:true});
model.set({"Name":"hi"});

如果我确实像上面那样工作正常,但我想知道是否有任何选项(例如silent)来强制调用回调。

谢谢。

最佳答案

如果您想采用传递选项的路线,那么实现此目的的唯一方法是在模型中使用类似的方法重写 set 方法,尽管我还没有对此进行测试以确保它会不会产生意想不到的结果。

set: function(key, val, options) {
        //call the origonal set so everything works as normal
        Backbone.Model.prototype.set.call(this, key, val, options);
        current = this.attributes, prev = this._previousAttributes;
        if (typeof key === 'object') {
            attrs = key;
            options = val;
        } else {
            (attrs = {})[key] = val;
        }

        options || (options = {});

        //new option to always trigger the change on an attribute
        if (options.loud) {
            for (var key in attrs) {
                //if the value is the same as before trigger the change
                //otherwise backbone will have already triggered the chage
                if (_.isEqual(prev[key] , attrs[key])) {
                    this.trigger('change:' + key, this, current[key], options);
                }
            }
        }
    }

然后为了利用它调用正常集但传递loud: true

this.model.set({
            name: "Hi"
        }, {
            loud: true
        });

这是一个使用它的 fiddle http://jsfiddle.net/leighking2/ktvj0kgp/ 为了表明即使属性相同,事件也会被触发,我添加了一个名为 renders 的属性来显示它被调用的次数。

关于javascript - 如何强制调用模型事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301881/

相关文章:

Javascript 变量函数不保留值

Javascript/jQuery 如何将负载旋转器附加到语法荧光笔插件

node.js - eonasdan-bootstrap-datetimepicker v4.17.37 小部件未使用 common.js 加载

javascript - 主干和 jQuery 事件

javascript - 如何在拖放 JavaScript 中控制源 TD 样式?

javascript - 单击按钮清除对象属性

javascript - 如何使用以下条件验证密码?

javascript - 重写 .fetch() 可处理虚假数据、urlRoot 错误和实际模型 ajax 请求

javascript - Backbone : Wait for multiple fetch to continue

javascript - 主干 View 事件或冒泡