我正在开发一个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的类也没有切换。
答案 0 :(得分:2)
你不应该使用&#34; getElementById&#34;除非ID在任何特定页面中不是唯一的。在您的情况下,由于组件位于每个循环中,因此重复相同的元素ID。
用ID替换ID将在这里工作。这是工作示例。 https://ember-twiddle.com/83604248a4bba2c5092d