2011-05-26 44 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