Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript EmberJS-处理视图中多个元素的事件_Javascript_Jquery_Ember.js - Fatal编程技术网

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'
})