2012-05-09 11 views
1

私はEmber.Viewをサブクラス化(拡張)してMy.Widgetを作成しています。私は各My.Widgetサブクラスに、XMLドキュメントからデシリアライズに使用できる「XMLTag」という「クラス属性」を持たせたいと思います。emberjsで「クラス属性」を定義するにはどうすればよいですか?

My.Widget = Ember.View.extend({ /*...*/ }); 
My.MySubWidget = My.Widget.extend({ /*...*/ }); 
My.MySubWidget.XMLTag = 'MySubWidget'; 

これは正しいですか?または、クラス属性を指定するために "extend()"で使用できるトリックがありますか?

答えて

2

クラスレベルの変数やメソッドを拡張するための適切な方法がreopenClass(である)、例えば:あなたは、さらにクラスを拡張する場合だけでMy.SubWidgetにプロパティを追加すること

My.SubWidget.reopenClass({ 
    xmlTag: 'mysubwidget' 
}); 

保持されませます。

0

classNamesプロパティでクラスを追加することができます。このプロパティは、具体的なビューのclass属性に追加される文字列の配列です。サブクラスはの連結プロパティーであるため、サブクラスはスーパークラスのclassNamesを上書きしませんが、スーパークラスのクラス名は上書きされません。

私は例を作成し、http://jsfiddle.net/pangratz666/xMBQ4/を参照してください。My.MySubWidgetビューが追加されたときに

My.Widget = Ember.View.extend({ 
    classNames: 'my-widget'.w(), 
    didInsertElement: function(){ 
     var classes = this.$().attr('class'); 
     console.log(classes); 
    } 
}); 
My.MySubWidget = My.Widget.extend({ 
    classNames: 'my-sub-widget XMLTag'.w() 
}); 

My.MySubWidget.create({ 
    classNames: 'class1 class2'.w(), 
    templateName: 'mySubWidget' 
}).append();​ 

これは次のように出力されますember-view my-widget my-sub-widget XMLTag class1 class2

+1

'classNames'を定義するときに、' .w() 'を最後に追加する必要はありません。スペースで区切られた文字列も受け入れます。 –

+0

'console.log(this.get( 'classNames'))'を実行すると 'classNames'は分割されていないので、出力は' ["ember-view"、 "my-widget" 、 "my-sub-widget XMLTag"、 "class1 class2"] 'のようになります。それは最後にDOM表現の 'class'属性が単なる文字列なので重要ではありません。しかし、 'w()'を省略するか、配列として 'classNameBindings'で定義しないと動作しません。http://jsfiddle.net/pangratz666/mGFUh/を参照してください。 – pangratz

+2

私は、OPはクラス対インスタンスのように "クラス"を意味すると思います。つまり、クラス変数が必要です。 –

関連する問題