Javascript EmberJS-处理视图中多个元素的事件
我有一个名为“Javascript EmberJS-处理视图中多个元素的事件,javascript,jquery,ember.js,Javascript,Jquery,Ember.js,我有一个名为“projects”的把手模板和一个名为“ProjectsView”的视图,该视图引用了带有templateName属性的模板 此项目模板从模型生成一个div列表,每个div需要单击展开 {{#each project in model}} <div class="project"> <img src="{{project.logo}}" /> <!-- Execute a different logic for the clic
projects
”的把手模板和一个名为“ProjectsView
”的视图,该视图引用了带有templateName
属性的模板
此项目模板从模型生成一个div
列表,每个div需要单击展开
{{#each project in model}}
<div class="project">
<img src="{{project.logo}}" /> <!-- Execute a different logic for the click event -->
<h4>{{project.title}}</h4> <!-- Execute a different logic for this click
{{/each}}
但是,在单击处理程序中编写一堆
if
,以查找单击事件是在图像上触发的还是在h4上触发的,并相应地采取行动,这感觉是不对的。这是处理事件的正确方法还是我做得不对?您可以使用App.ProjectsView
作为子视图,将每个项目作为子视图
App.ProjectsView = Ember.View.extend({
templateName: 'projects',
itemViewClass: 'App.ProjectView'
})
您可以使用target=view
直接处理子视图中的操作
由于您希望执行与DOM相关的任务(展开/折叠),因此处理视图中的操作将有所帮助,因为您可以使用this.$()
获得视图的jQuery对象。我认为您应该让控制器确定触发事件的元素,并将操作限制在该元素上。您是否正在将事件从视图发送到控制器?@Anthony不,我现在来调查。但这不是和我正在做的相似吗?我们不是在视图中测试事件目标,而是将此逻辑移动到控制器。是的,但区别在于不是为每个div都有一个事件侦听器,而是让控制器仅对触发事件的元素应用事件操作。它将使用反映原点的事件对象的属性,以代替应用于绑定到侦听器的所有元素的操作。@Anthony假设我有一个div,以及嵌套在此div中的两个其他元素。我想将单击事件侦听器附加到此包含的div。如果我理解正确,您的意思是,我应该在视图中使用单击处理程序,然后将此事件转发到相关控制器并在那里处理它。但是单击视图中的任何元素都会触发此单击事件,因为我只想侦听此特定div上的单击事件。目前,我能想到的唯一方法是使用event.target筛选事件。对吗?对,因为该事件操作的每个div的模型都是相同的,所以您可以找到任何div级别操作的类项目目标的父级。将动作包含到该div中(基本上与您所说的内置“上下文”的想法相同),感谢您的想法。我现在就试试。
App.ProjectsView = Ember.View.extend({
templateName: 'projects',
itemViewClass: 'App.ProjectView'
})