我可以在Backbone View中添加属性吗?

时间:2012-10-04 09:18:37

标签: object backbone.js backbone-views

我一直在使用骨干网一段时间,现在我正在使用一些观点。在我的一些观点中,我有时会添加自定义属性,如:

    var DataGrid = Backbone.View.extend({
        className:"datagrid",
        lookup: {
            header: "", //Header wrapper row element
            headers: [], //Views in header
            body: "", //Body wrapper row element
            rows: [] //Views in body
        },

        events: {
            ...
        },

        initialize: function() {
            ...
        },

        render: function() {
            ...
        }
    });

正如您所看到的,我将“查找”作为对象的额外属性。我在许多视图中使用DataGrid,我遇到了一种非常奇怪的行为。当我在使用DataGrid的视图之间切换时,仍然会使用旧数据填充“lookup”。我在创建一个新的DataGrid时使用“new”但我仍然找到旧数据。我错过了什么吗?

编辑:关注@rabs回复。我在Backbone中搜索了静态变量,发现了这个:Simplify using static class properties in Backbone.js with Coffeescript

2 个答案:

答案 0 :(得分:9)

我知道答案已经被接受了(前一段时间),但是当我最近在一个骨干项目上遇到这个问题时,我认为值得一提的是你也可以将属性定义为一个函数。这对于需要在当前模型中将属性设置为值的视图特别有用。

通过将属性定义为函数,您可以执行类似

的操作
var myObject = Backbone.View.extends({
    attributes: function() {
        if(this.model) {
            return {
                value: this.model.get('age')
            }
        }
        return {}
    }
}); 

希望能帮到某人

答案 1 :(得分:5)

以这种方式声明变量变量的范围是类而不是实例,类似于s static或class变量。

所以是的,查找对象将在不同的实例之间共享。

您可以在创建它时将查找对象传递给您的实例,使其表现为实例变量。