在骨干"为什么模型创建",它有什么用? - 下面是我的代码

时间:2012-12-11 11:45:44

标签: backbone.js backbone-model

我从骨干家庭网站上取了一个小代码,并安慰了这个功能,在这个例子中,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

2 个答案:

答案 0 :(得分:1)

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

您收到的模型是MVC范例的标准模型。模型是保存用户正在使用的数据的基础数据结构。

当你这样做时

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

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

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

推荐阅读:

More about MVC and models
More about backbone models

答案 1 :(得分:1)

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

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

另外,考虑一个同一个处理程序正在监听"更改:颜色"在多个模型上。同样,您可能想知道哪个模型发送了该事件。

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