0

我从主干站点获取了一个小代码,并控制了该函数,在此示例中,sidebar.on('change:color') 获取了该函数。但是它需要两个参数,一个是我们需要的“颜色”,我们在函数内部定义元素,为什么我们在这里给另一个参数作为“模型”,那个参数有什么作用?

如果我删除该参数只发送颜色,该功能根本不起作用......任何人帮助我理解这一点?

这里的示例函数:

var Sidebar = Backbone.Model.extend({
    promptColor : function(){
    var cssColor = prompt('Please enter a css color');
        this.set({color:cssColor});       
    }
});

window.sidebar = new Sidebar;

sidebar.on('change:color',function(model,color){ // what model parameter do here?
    console.log(model);
    $('#sidebar').css({
        background:color
    })
})

sidebar.set({color:'green'});
sidebar.promptColor();

当我控制台模型时,我得到了这个:

d
_callbacks: Object
_changing: false
_escapedAttributes: Object
_pending: Object
_previousAttributes: Object
_silent: Object
attributes: Object
changed: Object
cid: "c1"
__proto__: x
4

2 回答 2

1

Backbone 是一个 Javascript MVC 框架。(与标准 MVC 不同,Backbone 没有控制器,而是有集合)。

您收到的模型是 MVC 范式的标准模型。模型是保存用户正在使用的数据的底层数据结构。

当你这样做

sidebar.on('change:color', function(model, color) { 
   // some code here
});

您正在将事件处理程序附加到侧边栏模型。具体来说,您是说当color此模型上的属性发生更改时,调用该函数。由于此事件可以并且将在稍后的时间点触发,因此 Backbone 向事件处理函数传递了两个参数:第一个是触发事件的模型,第二个是更改的属性。

参数按特定顺序传递,即模型是第一个参数,更改的属性是第二个。因此,如果您model从事件处理函数中省略参数,则传入的模型将分配给color,并且颜色不会分配给任何参数。

推荐阅读:

更多关于 MVC 和模型
更多关于主干模型

于 2012-12-11T11:53:05.010 回答
1

您可能想知道哪个模型受到了影响。

考虑一个您正在收听集合上的事件的情况。修改了哪个型号的颜色值?模型参数告诉你这一点。

另外,考虑一个情况,即同一个处理程序正在多个模型上侦听“change:color”。同样,您可能想知道哪个模型发送了事件。

就像在其他事件驱动的环境中一样,“发送者”总是与事件数据一起传递。 model,在这种情况下,是发件人。

于 2012-12-11T11:53:45.187 回答