我是否可以仅在单击的元素上设置bindAttr类?

时间:2013-08-29 20:01:25

标签: ember.js

我得到了这个用一些动作函数排序的表:

  <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添加该类。

1 个答案:

答案 0 :(得分:1)

要获取DOM元素,您应截取actionview的点击,然后将其转发给控制器的函数调用。对于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>
  ...

希望它有所帮助。