想象一下,我有一个视图,作为视图的一部分,它渲染'x'模型对象,仅渲染'x'。问题是,让这个视图相关的常量在哪里?
我的猜测是做这样的事情:
myApp.MyView = Backbone.View.extend({
...
myConstant: 10,
...
render: function(){
...
//some code that uses myConstant
...
}
});
这有意义吗?
任何建议都有帮助!
答案 0 :(得分:11)
听起来你想要做的就是为视图分配一个类属性。您可以将第二个哈希值传递给您的extend调用来执行此操作。您的代码看起来像这样:
myApp.MyView = Backbone.View.extend({
render: function() {
alert(myApp.MyView.myConstant);
}
}, {
myConstant: 10
});
您的常量可以作为myApp.MyView.myConstant访问。
答案 1 :(得分:5)
你非常接近!你实际上只是使用this.myConstant。这是一个有效的例子......
testView = Backbone.View.extend({
test: "hello world!",
initialize: function(){
alert( this.test );
_.bindAll(this, "render");
},
render: function(){
//do your rendering...
return this;
}
});
var view = new testView();
答案 2 :(得分:1)
如上所述,我同意(并赞成)接受的答案,但为了清楚起见,我很想采用这种格式:
myApp.MyView = Backbone.View.extend({
render: function() {
alert(myApp.MyView);
}
});
_.extend(myApp.MyView.prototype, {
enum : {
//...
}
});
原因是你的视图可能有很多mixins,当你只是继续将对象添加到View.extend之后,我发现可见性变得模糊。至少通过这种方式,您可以将其分解并在mixins之间添加注释。如果你使用RequireJS并加载一组常见的枚举/ mixin,它也会更有意义。
答案 3 :(得分:1)
不要在扩展下初始化视图常量,它将像所有视图实例的静态常量一样。改为使用构造函数:
constructor: function()
{
Backbone.View.prototype.constructor.apply(this, arguments);
this.myConstant = 10;
this.myOtherConstant = {};
}