1

我正在尝试创建具有正在扩展中的视图中描述的功能的视图,但具有不同的类名。发生的事情是 ExpTypesView 类是 ['nav','nav-pills']['nav','nav-tabs']。如何设置它以便它们替换NavView 中设置的类名?

Resume.NavView = Em.View.extend({
  tagName: 'ul',
  classNames: ['nav','nav-tabs'],
  currentPathDidChange: function(){
    Ember.run.next( this, function() {
      $("ul li:has(>a.active)").addClass('active');
      $("ul li:not(:has(>a.active))").removeClass('active');
   }); 
  }.observes('controller.currentPath')
});
Resume.ExpTypesView = Resume.NavView.extend({
  classNames:['nav','nav-pills']
});
4

2 回答 2

4

Ember.View,classNames中是一个连接属性,因此您添加的属性将与超类值连接。

您可以使用classNameBindings在超类和后代中设置类型。

App.NavView = Em.View.extend({
  tagName: 'ul',
  classNames: ['nav'],
  classNameBindings: ['type'],
  type: 'nav-tabs',
  currentPathDidChange: function(){
    Ember.run.next( this, function() {
      $("ul li:has(>a.active)").addClass('active');
      $("ul li:not(:has(>a.active))").removeClass('active');
   }); 
  }.observes('controller.currentPath')
});

App.ExpTypesView = App.NavView.extend({
  type: 'nav-pills',
});

这使得类class="ember-view nav nav-tabs"class="ember-view nav nav-pills".

JSBin 示例

于 2013-05-12T21:30:34.693 回答
2

这个肮脏的小解决方法给了我我想要的东西,但如果你知道更好的方法或任何解释这一点的资源,请告诉我!

Resume.ExpTypesView = Resume.NavView.extend({
  //classNames:['nav','nav-pills'],
  init: function(){
    this.set('classNames', ['nav','nav-pills']);
  }
});
于 2013-05-12T21:22:46.263 回答