我从骨干家庭网站上取了一个小代码,并安慰了这个功能,在这个例子中,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
答案 0 :(得分:1)
Backbone是一个Javascript MVC框架。 (与标准MVC不同,Backbone没有控制器,而是有集合)。
您收到的模型是MVC范例的标准模型。模型是保存用户正在使用的数据的基础数据结构。
当你这样做时
sidebar.on('change:color', function(model, color) {
// some code here
});
您正在将事件处理程序附加到侧边栏模型。具体来说,您说当此模型上的color
属性发生更改时,请调用该函数。由于此事件可以并且将在稍后的时间点触发,因此Backbone传递事件处理函数两个参数:第一个是事件触发的模型,第二个是更改的属性。
参数以特定顺序传递,即model是第一个参数,而changed属性是第二个参数。因此,如果从事件处理函数中省略model
参数,则传入的模型将分配给color
,并且颜色不会分配给任何参数。
推荐阅读:
答案 1 :(得分:1)
您可能想知道哪个型号受到影响。
考虑一个您正在收集集合上的事件的情况。哪个型号的颜色值被修改了? model参数告诉你这个。
另外,考虑一个同一个处理程序正在监听"更改:颜色"在多个模型上。同样,您可能想知道哪个模型发送了该事件。
就像在其他事件驱动的环境中一样,"发送者"始终与事件数据一起传递。在这种情况下,model
是发件人。