2011-05-26 25 views
14

Bir görünümüm olduğunu ve bir görünümün bir parçası olarak 'x' model nesneleri oluşturduğunu ve yalnızca 'x' olduğunu düşünün. Soru, bu görüşü sabit tutmak için benim için uygun nerede?Görünümle ilgili sabitleri nereye yerleştirmeliyim - backbone.js

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

Bu anlamlı mı:

Benim tahminim böyle bir şey yapmak olacaktır?

Herhangi bir öneride yardım!

cevap

11

Yapmak istediğiniz şey, görünüme bir sınıf özelliği atamak gibi geliyor. Bunu yapmak için genişletme çağrınıza ikinci bir karma iletebilirsiniz. Kişisel kod aşağıdaki gibi görünecektir:

myApp.MyView = Backbone.View.extend({ 

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

}, { 

    myConstant: 10 

}); 

sizin sürekli myApp.MyView.myConstant olarak erişilebilir olduğu.

+1

teşekkürler. Bunu kabul ediyorum çünkü sınıf özelliklerini bilmiyordum ama asıl sorum biraz farklıydı. * Bu şekilde yapabilir miyim *, ama * bu şekilde yapmalı mıyım *. Bu tip mülklerin sadece yüzdüğü için iyi bir uygulama mıdır? – idbentley

+0

Teşekkürler ve tamamen anladım. Bu Java olsaydı, sınıfa bir sabit eklerdiniz. Alternatifiniz, bazı küresel sabitleri kurmak olacaktır, ancak o zaman küresel olacaktır ve ilgili olduğu konuya isim vermeyecektir. Onun iyi bir uygulama olduğunu söyleyebilirim, yine de başka birinin fikrine açığım. –

+0

Bu çözümü çok beğeniyorum. Bununla birlikte, açıklık için uçurumda yapmak yerine ayrı bir uzantı ekleyebilirim. Bu sadece kişisel bir tercih olsa da. – backdesk

5

Çok yakınsınız! Aslında bunu kullanacaksın. İşte bir örnek ...

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

Ben ancak netlik için bu biçimi ile gitmek için cazip olacağını kabul cevabı ile kabul (ve upvoted) Yukarıdaki gibi:

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

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

Eğer görüntülemek ve ben için Mixins çok var olabilir varlık nedeni View.extend nesnesinden sonra nesneye eklemeye devam ettiğinizde görünürlük bulanıklaşır. En azından böylelikle parçalara ayırabilir ve karışımlarınız arasında yorum ekleyebilirsiniz. Ayrıca, RequireJS'yi kullanıyorsanız ve ortak bir dizi enum/mix setinde yükleme yapmak biraz daha mantıklı.

+0

Doğru sözdizimi nedir? myApp.MyView.enum, tanımlandığı gibi tanımlanmamıştır. – eugene

+1

@eugene http://jsfiddle.net/3kson67y/ – backdesk

+0

oh öyleyse, yeni myApp.MyView(). Enum. Teşekkürler. – eugene

1

Görünüm sabitlerinizi genişletme sırasında başlatma, tüm görünüm örnekleriniz için statik sabit gibi davranır. yerine kullan yapıcısı:

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

more explanation here

+0

Ardından sabitlerinizin prototipinizin bir parçası olmasını istemiyorsanız örneği genişletin. Normalde sabitleri ayrı kontrolörler/modüller halinde tutarım (bazen koleksiyonlar dahilinde). – backdesk