我一直在使用骨干网一段时间,现在我正在使用一些观点。在我的一些观点中,我有时会添加自定义属性,如:
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
答案 0 :(得分:9)
我知道答案已经被接受了(前一段时间),但是当我最近在一个骨干项目上遇到这个问题时,我认为值得一提的是你也可以将属性定义为一个函数。这对于需要在当前模型中将属性设置为值的视图特别有用。
通过将属性定义为函数,您可以执行类似
的操作var myObject = Backbone.View.extends({
attributes: function() {
if(this.model) {
return {
value: this.model.get('age')
}
}
return {}
}
});
希望能帮到某人
答案 1 :(得分:5)
以这种方式声明变量变量的范围是类而不是实例,类似于s static或class变量。
所以是的,查找对象将在不同的实例之间共享。
您可以在创建它时将查找对象传递给您的实例,使其表现为实例变量。