我应该在哪里放置与视图相关的常量 - backbone.js

时间:2011-05-26 17:56:31

标签: view constants conventions backbone.js

想象一下,我有一个视图,作为视图的一部分,它渲染'x'模型对象,仅渲染'x'。问题是,让这个视图相关的常量在哪里?

我的猜测是做这样的事情:

myApp.MyView = Backbone.View.extend({
    ...
    myConstant: 10,
    ...
    render: function(){
        ...
        //some code that uses myConstant
        ...
    }
});

这有意义吗?

任何建议都有帮助!

4 个答案:

答案 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 = {};
}

more explanation here