覆盖一个骨干模式更改事件 [英] Overwriting a Backbone Models Change Event

查看:83
本文介绍了覆盖一个骨干模式更改事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想我想要做的是pretty简单的我只是不知道如何做到这一点。我想,当我的模特之一的一些数据传递给事件处理程序(更改是否增加或减少值)的目的属性进行更改解雇我自己的事件。

基本上,我想我的处理程序做这个视图

 处理程序:功能(增加){
   如果(增加){
      警报(价值增加)
   }
   其他{
      警报(下称值下降)
   }
}// ...this.model.on(变化:ATTR,this.handler,这一点);


解决方案

在这里你去:你基本上听的变化:MYVAR 。当变化发生时,你用你的模型 previous()来获得旧值。根据它是否增加或减少你火了相应的事件。你可以听在显示这些事件的初始化()

 (函数($){    window.MyModel = Backbone.Model.extend({        初始化:功能(){
            this.on('的变化:MYVAR',this.onMyVarChange);
            this.on('增高:MYVAR',函数(){
                的console.log(增加);
            });
            ,功能)({:this.on('MYVAR下降
                的console.log('减少');
            });
        },        onMyVarChange:功能(){
            如果(this.get('MYVAR')方式>本previous('MYVAR')){
                this.trigger('增高:MYVAR');
            }其他{
                this.trigger('下降:MYVAR');
            }
        }
    });    window.mymodel =新为MyModel({MYVAR:1});
    mymodel.set({MYVAR:2});
    mymodel.set({MYVAR:3});
    mymodel.set({MYVAR:1});})(jQuery的);

运行上面会打印提高,增加,减少到控制台。

I think what I want to do is pretty simple I just don't know how to do it. I would like to fire my own event when one of my models attributes changes for the purpose of passing some data to the event handler (whether the change was an increase or decrease in value).

Basically I want my handler to do this in the view

handler: function(increased) {
   if(increased) {
      alert("the value increased")
   }
   else {
      alert("the value decreased")
   }
}

// ...

this.model.on("change:attr", this.handler, this);

解决方案

Here you go: You basically listen for change:myvar. When a change occurs you use your model's previous() to get the old value. Depending on whether it increased or decreased you fire the appropriate event. You can listen to these events as shown in the initialize().

(function($){

    window.MyModel = Backbone.Model.extend({

        initialize: function () {
            this.on('change:myvar', this.onMyVarChange);
            this.on('increased:myvar', function () {                  
                console.log('Increased');                
            });
            this.on('decreased:myvar', function () {                  
                console.log('Decreased');                
            });
        },

        onMyVarChange: function () {
            if (this.get('myvar') > this.previous('myvar')) {
                this.trigger('increased:myvar');  
            } else {
                this.trigger('decreased:myvar');
            }
        }            
    });

    window.mymodel = new MyModel({myvar: 1});
    mymodel.set({myvar: 2});
    mymodel.set({myvar: 3});
    mymodel.set({myvar: 1});

})(jQuery);​

Running the above will print "Increased", "Increased", "Decreased" to your console.

这篇关于覆盖一个骨干模式更改事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆