1

我得到了这张表,它使用一些动作函数进行了排序:

  <thead>
    <tr>
      <th>
        <span {{action 'sortNums'}} {{bindAttr class=":carrot :active :up isActive:active direction"}}></span>
      </th>
      <th>
        <span {{action 'sortNums'}} {{bindAttr class=":carrot isActive:active direction"}}></span>
      </th>
    </tr>
  </thead>

在控制器内部我有动作功能,我想只在被点击的元素上设置方向类,而不是整个东西:

 sortNums: function(){
    if (this.get('direction') === 'up') {
      this.set('direction', 'down');
      this.set('sortAscending', true);
    } else {
      this.set('direction', 'up');
      this.set('sortAscending', false);
    }
  }

我真的不认为这是可能的,我可能不得不使用视图来做到这一点,但只是想知道......

另外,如果我要使用视图,我是否必须为<span>我的表中的每一个视图都有一个视图?(我有7个)

我不知道这是否可能,但如果我可以获取单击元素的 DOM 节点,我可以使用 jQuery 添加类。

4

1 回答 1

1

要获取 DOM 元素,您应该拦截对actiona的单击view,然后将其转发到对控制器的函数调用。至于view你不需要一个视图,span只需捕获包装表格的视图上的点击事件。

像这样的东西应该工作:

App.TableHeaderSortView = Ember.View.extend({
  tagName: 'span',
  click: function(event) {
    this.get('controller').send('sortNums', event)
  },
  classNameBindings: [':carrot :active :up isActive:active direction'],
  direction: '...'
  ...
});

App.TheControllerBackingTheViewController = Ember.ArrayController.extend({
  actions: {
    sortNums: function(event) {
      // event available here
    }
  }
});

<thead>
<tr>
  <th>
    {{view App.TableHeaderSortView}}
  </th>
  ...

希望能帮助到你。

于 2013-08-29T21:13:38.647 回答