何时使用带有Ember

时间:2015-05-28 15:36:57

标签: ember.js controller web-component

在Ember的最新版本(1.10+)中,似乎有一种趋势是使用组件而不是控制器和视图。

The wisdom seems to be: "仅使用顶级控制器接收路由数据,并使用Ember.Controller而不是Ember.ArrayController或Ember.ObjectController"

这对我来说很有意义,因为创建可重用组件很酷,但在某些情况下我不清楚适当的方法是什么。

假设我们有一个表示表中一行的组件,如下所示:

# entry-row.js component
import Ember from 'ember';

export default Ember.Component.extend({
  tagName: 'tr',

  actions: {
    toggleResolving: function() {
      this.toggleProperty('resolving');
    }
  },

  isChecked: function() {
    return this.get('resolving');
  }.property('resolving')
});

# entry-row.hbs template
<td {{action "toggleResolving"}}>{{entry.name}}</td>
<td>{{entry.currency.symbol}}{{entry.amount}}</td>
<td>{{entry.date}}</td>
<td class="bs-checkbox">{{input type="checkbox" checked=isChecked class="toggle"}}</td>

为了形成表格,使用了许多相同的组件。太棒了。如果存在一些仅适用于该行的非持久状态,则该属性可以属于该组件并在那里进行更改。类似的东西:

actions: {
    toggleResolving: function() {
      this.toggleProperty('resolving');
    }
  }

但是说我的resolving属性在组件外部也很有用。在这种情况下,我希望能够标记多行以进行解析,然后集体对它们执行某些操作。我相信在切换到组件之前,我会在Controller上定义resolving属性,并在需要模型+状态的任何地方使用该控制器。

我还应该把它放在控制器上吗?

1 个答案:

答案 0 :(得分:0)

除了使用外部组件外,另一个选择是在模型上放置属性。您还可以与mixin分享常见的操作。