如何在emberjs中定义“类属性”?

时间:2012-05-09 01:51:54

标签: javascript ember.js

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

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

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

2 个答案:

答案 0 :(得分:2)

扩展类级变量或方法的正确方法是reopenClass(),例如:

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

如果您进一步扩展该类,只需将该属性添加到My.SubWidget将

答案 1 :(得分: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