如何为无标记的ember组件分配类名

时间:2016-08-22 06:43:05

标签: javascript ember.js

用户-table.js

export default Ember.Component.extend({
    tagName: ''
});

用户-table.hbs

<table>
    {{yield}}
</table>

使用

{{#users-table class="table table-bordered"}}
    {{#table-head}}
        {{#table-row}}
            {{table-head-cell}}
            {{table-head-cell}}
        {{/table-row}}
    {{/table-head}}
    {{#table-body}}
        {{#each users as |user|}}
            {{#table-row}}
                {{table-body-cell cellValue=user.name}}
                {{table-body-cell cellValue=user.age}}
            {{/table-row}}
        {{/each}}
    {{/table-body}}
    {{#table-foot}}
        {{#table-row}}
            {{table-head-cell}}
            {{table-head-cell}}
        {{/table-row}}
    {{/table-foot}}
{{/users-table}}

因为我提到组件的tagName为空(tagName:''),如何为该根元素传递类名。有没有其他选择

2 个答案:

答案 0 :(得分:1)

无标签组件,如名称所示,没有标签,因此您无法在其上粘贴类。它们也没有事件处理,因为没有元素可以注册处理程序。

评论中的建议处于良好的轨道,使用tagName="table"并且在组件模板中只有{{yield}}

// user-table.js
export default Ember.Component.extend({
  tagName: 'table'
});

// user-table.hbs
{{yield}}

这似乎比其他选择更好地利用了Ember功能。

答案 1 :(得分:0)

您可以将classNames传递给无标记组件(如Ember Twiddle):

// user-table.js
export default Ember.Component.extend({
  tagName: ''
});

// user-table.hbs
<table class="{{class}}">
  {{yield}}
</table>

// usage
{{#users-table class="table table-bordered"}}...{{/users-table}}

无标记组件的优点在于,从模板中可以清楚地看到组件的顶级元素是什么,您不必查找javascript文件。