【问题标题】:set CSS class depending on returned string with Ember使用 Ember 根据返回的字符串设置 CSS 类
【发布时间】:2015-01-21 16:54:00
【问题描述】:

我仍在学习 ember,但我不知道如何根据某个控制器上模型的返回字符串应用某些 CSS 类。

官方文档 (http://emberjs.jsbin.com/yoqifiguva/1/edit?html,js,output) 仅涵盖布尔值。

我没有设法将这些知识应用到我的案例中。 我有状态字符串字符串,例如:“通过”、“失败”、“挂起”和“阻塞”,我想为每个状态应用不同的 css 类。

关于如何实现这一点的任何示例?

【问题讨论】:

    标签: css ember.js ember-controllers


    【解决方案1】:

    您可以使用bind-attr,例如:

    <ul>
    {{#each item in model}}
      <li {{bind-attr class='item.status'}}>An item with status: `{{item.status}}`</li>
    {{/each}}
    </ul>
    

    生成以下 HTML:

    <ul>
      <li class="passed" data-bindattr-262="262">An item with status: `passed`</li>
      <li class="failed" data-bindattr-265="265">An item with status: `failed`</li>
    </ul>
    

    供收藏:

    [
      YourModel.create({ status: 'passed'}),
      YourModel.create({ status: 'failed'})
    ]
    

    对象声明如下:

    YourModel = Em.Object.extend({
      status: null
    });
    

    Demo.

    您还可以创建Component,它可以在许多模型中重复使用。 组件代码:

    App.StatusItemComponent = Em.Component.extend({
      classNameBindings: ['status'],
    
      status: function() {
        var modelStatus = this.get('model.status');
        if (modelStatus)
          return 'status-' + modelStatus;
      }.property('model.status')
    });
    

    模板代码:

    {{#each item in model}}
      {{#status-item model=item}}
        An item with status: {{item.status}}
      {{/status-item}}
    {{/each}}
    

    Demo.

    【讨论】:

    • 它当然可以解决我的问题,但它不可扩展。我的意思是,如果我有其他模型的统计信息,我应该表示如果 css 类这种方法将不起作用..
    • 您可以使用classNameBindings: ['model.status'] 创建组件并重用它。
    • 你能解释一下吗?
    • Component 使用示例更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多