1

My.Widgetを作成するためにEmber.Viewをサブクラス化(「拡張」)しているとします。各My.Widgetサブクラスに、XMLドキュメントからの逆シリアル化に使用できる「XMLTag」と呼ばれる「クラス属性」を持たせたいです。

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

これはこれについて行く正しい方法ですか?または、「extend()」でクラス属性を指定するために使用できるある種のトリックはありますか?

4

2 に答える 2

2

クラスレベルの変数またはメソッドを拡張する適切な方法は、reopenClass()です。例:

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

クラスをさらに拡張しても、プロパティをMy.SubWidgetに追加するだけでは保持されません。

于 2012-05-09T12:00:19.230 に答える
0

classNames:のプロパティを介してクラスを追加できます。このプロパティは、具象ビューEmber.Viewの属性に追加される文字列の配列です。classこれはいわゆる連結プロパティであるため、サブクラスclassNamesはスーパークラスのを上書きしませんが、それを拡張します。したがって、スーパークラスのクラス名は上書きされません。

例を作成しました。http ://jsfiddle.net/pangratz666/xMBQ4/を参照してください。

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

これにより、My.MySubWidgetビューが追加されたときに次のように出力されますember-view my-widget my-sub-widget XMLTag class1 class2

于 2012-05-09T06:41:05.183 に答える