1

假设我正在对 Ember.View 进行子类化(“扩展”)以创建 My.Widget。我希望每个 My.Widget 子类都有一个名为“XMLTag”的“类属性”,可用于从 XML 文档中反序列化。

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

这是解决这个问题的正确方法吗?或者我可以在“extend()”中使用某种技巧来指定它的类属性?

4

2 回答 2

2

The proper way to extend class level variables or methods is reopenClass(), e.g.:

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

Simply adding the property to My.SubWidget will not be retained if you further extend the class.

于 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 回答