View 我应该将视图相关常量-backbone.js放在哪里

View 我应该将视图相关常量-backbone.js放在哪里,view,constants,conventions,backbone.js,View,Constants,Conventions,Backbone.js,假设我有一个视图,作为视图的一部分,它只渲染“x”模型对象和“x”。问题是,我把这个与视图相关的常数放在哪里合适 我的猜测是这样做: myApp.MyView = Backbone.View.extend({ ... myConstant: 10, ... render: function(){ ... //some code that uses myConstant ... } }); myApp.MyV

假设我有一个视图,作为视图的一部分,它只渲染“x”模型对象和“x”。问题是,我把这个与视图相关的常数放在哪里合适

我的猜测是这样做:

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

    render: function() {
        alert(myApp.MyView.myConstant);
    }

}, {

    myConstant: 10

});
这有意义吗


任何建议都有帮助

你们很接近!实际上,您只需要使用这个.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();

听起来您想要做的是为视图指定一个类属性。您可以在extend调用中传递第二个散列来执行此操作。您的代码如下所示:

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

    render: function() {
        alert(myApp.MyView.myConstant);
    }

}, {

    myConstant: 10

});
如果您的常量可以作为myApp.MyView.myConstant访问。

如上所述,我同意(并投票赞成)接受的答案,但为了清楚起见,我倾向于使用以下格式:

myApp.MyView = Backbone.View.extend({
    render: function() {
        alert(myApp.MyView);
    }
});

_.extend(myApp.MyView.prototype, {
  enum : {
      //...
  }
});

原因是你的视图可能有很多混合,我发现当你不断地在一个又一个对象上添加要查看的对象时,可见性会变得模糊。至少通过这种方式,您可以将其分解,并在混音之间添加注释。如果您使用RequireJS并加载到一组通用的枚举/混合中,这也会更有意义。

不要在extend下初始化视图常量,它将像所有视图实例的静态常量一样运行。请改用构造函数:

constructor: function()
{
     Backbone.View.prototype.constructor.apply(this, arguments);
     this.myConstant = 10;
     this.myOtherConstant = {};
}

谢谢。我接受这一点,因为我不知道类属性,但我真正的问题略有不同。我不能这样做,但我应该这样做。让这些类型的房产四处漂流是否被认为是一种好的做法?谢谢,我完全理解。如果这是Java,您将在类上附加一个常量。您的备选方案是设置一些全局常量,但它将是全局常量,而不是与相关关注点的名称空间。我会说这是一个很好的做法,尽管我愿意接受其他人的意见。我真的很喜欢这个解决方案。不过,为了清晰起见,我会添加一个单独的扩展,而不是动态地进行扩展。这只是个人喜好。正确的语法是什么?myApp.MyView.enum目前还未定义。哦,的确如此,新建myApp.MyView().enum。谢谢。@eugene-这只是一种方法。关键是它位于视图实例上。请参阅下面omeralper对此的评论,因为这可能不是您想要做的。如果您不希望常量成为原型的一部分,请扩展实例。通常,我在单独的控制器/模块中保留常量(有时在集合中)。