Ember onClick事件未完成操作

时间:2015-12-15 17:35:13

标签: javascript jquery dom ember.js

我正在开发一个Ember应用程序,我在处理DOM和组件方面遇到了麻烦。我有一个companies-expander组件,它将显示database中的每个公司,并将展开以显示该公司可用的工作:

//companies.hbs
<h1>Companies</h1>

{{#each model as |company| }}
  {{company-expander name=company.name url=company.url address=company.address positions=company.positions}}
{{/each}}

{{outlet}}

公司 - 扩展程序组件模板文件如下所示:

<div class="expander">
  <a href="javascript:void(0)" id="js-expander-trigger" class="expander-trigger expander-hidden">{{name}}</a>
  <div id="js-expander-content" class="expander-content">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p>
  </div>
</div>

company-expander.js 文件看起来像这样:

import Ember from 'ember';

export default Ember.Component.extend({
    _setup: Ember.on('didInsertElement', function() {

        console.log("doc ready");
        var expanderTrigger = document.getElementById("js-expander-trigger");
        var expanderContent = document.getElementById("js-expander-content");

        $('#js-expander-trigger').click(function(){
          console.log("click");
          $(this).toggleClass("expander-hidden");
        });

    })
});

该组件成功加载并提取公司名称。问题是点击第一项时只点击注册并记录点击次数,但返回的公司记录很多。 div的类也没有切换。

1 个答案:

答案 0 :(得分:2)

你不应该使用&#34; getElementById&#34;除非ID在任何特定页面中不是唯一的。在您的情况下,由于组件位于每个循环中,因此重复相同的元素ID。

用ID替换ID将在这里工作。这是工作示例。 https://ember-twiddle.com/83604248a4bba2c5092d