Ember生成动作或jquery onclick
我有一个可以正常运行的余烬应用程序。 但是用户的交互会像下面那样插入一些DOM …
$(.test).append(Get Data);
问题是Ember似乎没有意识到已经在DOM中添加了一个动作“getData”。 单击元素时没有任何事情发生。 有什么想法吗?
我想要做的另一种方式是:
//create the element $(.test).append(Get Data); //make click listener $('#idnum').click(function(){ console.log("get data"); }
我的问题是我应该将代码放在组件内部,以便它可以监听click事件。 谢谢。
你应该用Ember方式做。 尝试使用把手{{#if}}帮助器动态渲染元素。
{{#if canGetData}} Get Data {{/if}}
在这里,您可以根据用户操作在控制器中将canGetData的值设置为true。
第一个示例无法工作,因为ember不会分析DOM中的Handlebars元素,而是使用HTMLBars(一个完整的HTML解析器)解析Handlebars模板,然后通过插入元素而不是文本到DOM中手动呈现它。
然而,第二个例子是如果你必须依赖外部代码进行手动DOM操作的方法。 它确实有效。 看看这个旋风。
这确实有效:
this.$('.target').append('Get Data'); this.$('#idnum').on('click', () => { alert('clicked'); });
只需确保DOM已准备就绪。 所以在didInsertElement
钩子中或在用户单击一个按钮之后这样做。
像Lux建议避免使用DOM操作。 我更喜欢以下方法,
如果它是动态的,那么您可以考虑将DOM元素包装为新组件并使用组件帮助器。 找到样品旋转
在application.js中
export default Ember.Controller.extend({ appName: 'Ember Twiddle', linksArray:[ Ember.Object.create({value:'Text to display',routename:'home'}), Ember.Object.create({value:'Text to display2',routename:'home'})], actions:{ addItem(){ this.get('linksArray').pushObject(Ember.Object.create({value:'AddedDynamically',routename:'home'})); } } });
在Application.hbs中
Welcome to {{appName}}
{{#each linksArray as |item|}} {{component 'link-to' item.value item.route }} {{/each}}
{{outlet}}