2011-05-26 53 views
14

想象一下,我有一个视图,并且作为视图的一部分,它仅渲染'x'模型对象和'x'。这个问题,我认为这个观点相关的常数在哪里?我应该在哪里放置视图相关的常量 - backbone.js

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

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

这是否有道理?

任何建议帮助!

回答

11

这听起来像你想要做的是将一个类属性分配给视图。您可以将第二个散列传递给您的扩展调用来执行此操作。您的代码会是这个样子:

myApp.MyView = Backbone.View.extend({ 

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

}, { 

    myConstant: 10 

}); 

在您不变的是作为myApp.MyView.myConstant访问。

+1

谢谢。我接受这一点,因为我不知道类的属性,但我真正的问题略有不同。不*我可以这样做*,但*我应该这样做*。这些类型的属性是否只是浮动而被认为是好的做法? – idbentley 2011-05-27 14:39:09

+0

谢谢,完全理解。如果这是Java,你会在课堂上附加一个常量。你的选择是建立一个全球性的常量,但那么它将是全局性的,而不是命名空间与它相关的关注点。我会说它的良好做法,尽管我接受别人的意见。 – 2011-05-27 16:38:27

+0

我很喜欢这个解决方案。但是,为了清楚起见,我将添加一个单独的扩展,而不是实时进行。这只是个人喜好。 – backdesk 2013-12-10 14:19:37

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(); 
1

正如上面我同意(和upvoted)接受的答案然而为清楚起见我会受到诱惑去与此格式:

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

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

的原因是,你可能有很多的混入对你的看法和我当您继续在对象之后添加对象到View.extend时,发现可见性变得模糊。至少这样你可以分解它并在你的mixins之间添加注释。如果你正在使用RequireJS并加载一组普通的枚举/混合类,它也会更有意义。

+0

什么是正确的语法? myApp.MyView.enum是未定义的。 – eugene 2014-10-06 08:59:23

+1

@eugene http://jsfiddle.net/3kson67y/ – backdesk 2014-10-06 11:42:18

+0

哦,是的,新的myApp.MyView()。枚举。谢谢。 – eugene 2014-10-06 12:23:19

1

不要在扩展下初始化您的视图常量,它将表现为所有视图实例的静态常量。使用构造函数来代替:

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

more explanation here

+0

然后只是扩展实例,如果你不想让你的常量成为你的原型的一部分。通常我将常量保存在单独的控制器/模块中(有时在集合中)。 – backdesk 2014-10-06 12:00:11