【问题标题】:Bind-attr "for" attribute in Ember.jsEmber.js 中的绑定属性“for”属性
【发布时间】:2015-06-24 23:40:43
【问题描述】:

我正在尝试为 and 标记添加一个唯一 ID,以获取自定义复选框。 {{input}} 标签输出正确,但 <label {{bind-attr for=binding}} 没有。我是 Ember 的新手,所以我相信这应该是微不足道的。

<ul class="col-menu dropdown-menu">
  {{#each columns}}
    <li>
      {{input type="checkbox" checked=checked id=binding}} 
      <label {{bind-attr for=binding}}><span></span></label>
      <span>{{heading}}</span>
      {{columns}}
    </li>
  {{/each}}
</ul>

这是输出...

<li>
  <input id="activityTotal" class="ember-view ember-checkbox" type="checkbox" checked="checked"> 
  <label data-bindattr-2689="2689">
    <span></span>
  </label>
  <span>
    <script id="metamorph-53-start" type="text/x-placeholder"></script>
    Events
    <script id="metamorph-53-end" type="text/x-placeholder"></script>
  </span>
  <script id="metamorph-54-start" type="text/x-placeholder"></script>
  <script id="metamorph-54-end" type="text/x-placeholder"></script>

【问题讨论】:

    标签: javascript ember.js data-binding handlebars.js


    【解决方案1】:

    首先,您应该将所有这些包装在一个组件中。

    你真的不应该像这样手动绑定 id,因为 ember 在内部使用它,但我认为在这种情况下这是可以接受的,因为我想不出更好的方法,但你需要保持唯一性。

    我会这样做以确保 id 是唯一的并使用

      checkBoxId: Ember.computed(function(){
        return "checker-" + this.elementId;
      }),
    

    这是组件运行时将执行的组件的 javascript 文件:

    App.XCheckboxComponent = Ember.Component.extend({
      setup: Ember.on('init', function() {
        this.on('change', this, this._updateElementValue);
      }),
      checkBoxId: Ember.computed(function(){
        return "checker-" + this.elementId;
      }),
      _updateElementValue: function() {
        this.sendAction();
    
        return this.set('checked', this.$('input').prop('checked'));
      }
    });
    

    这是组件的模板,我使用unbound将唯一的checkBoxId与标签的for绑定:

    <label for="{{unbound checkBoxId}}">
       {{label}}
      <input id="{{unbound checkBoxId}}" type="checkbox" {{bind-attr checked="checked"}}>
    </label>
    

    以下是您可以如何使用它:

    <ul>
      {{#each contact in model}}
        <li>{{x-checkbox label=contact.name enabled=contact.enabled}}</li>
      {{/each}}
    </ul>
    

    这里是用于 ember 1.7.1 的工作 jsbinhere 是用于 ember 1.11.1 的工作 jsbin。

    【讨论】:

      【解决方案2】:

      version 1.11 开始,您不需要bind-attr。您应该能够像这样绑定属性:

      <label for={{binding}}></label>
      

      【讨论】:

      • 我正在运行 Ember 1.7.1。当我有&lt;label for={{binding}}&gt;&lt;span&gt;&lt;/span&gt;&lt;/label&gt; .... &lt;label for="&lt;script" id="metamorph-52-start" type="text/x-placeholder"&gt;&lt;script id="metamorph-52-end" type="text/x-placeholder"&gt;&lt;/script&gt;&amp;gt;&lt;span&gt;&lt;/span&gt;&lt;/label&gt;
      • 哦,对不起。使用 1.7.1,您需要使用 bind-attr 语法,但我不确定它为什么不起作用(我自己是 Ember 新手,仍在学习)。我最好的猜测是 binding 可能是 Ember 中的保留字?
      • 没问题。希望我能提供更多帮助。祝你好运。
      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2013-06-29
      相关资源
      最近更新 更多