gpt4 book ai didi

ember.js - 目标的事件委托(delegate)

转载 作者:行者123 更新时间:2023-12-03 06:25:07 25 4
gpt4 key购买 nike

在下面的代码中,我的点击事件委托(delegate)和 View 层次结构中的所有三个“点击”处理程序都被触发。

但是,我还想在整个 View 层次结构中触发'edit''edit' 只是我的'child' View 中元素的目标。

模板

<script type="text/x-handlebars">
{{#view App.GrandparentView}}
{{#view App.ParentView}}
{{#view App.ChildView}}
<span {{action "edit" target="view"}}>Click Me</span>
{{/view}}
{{/view}}
{{/view}}
</script>

JavaScript

App.GrandparentView = Ember.View.extend({
click: function() {
console.log('Grandparent Click Fired!');
},
edit: function () {
console.log('GrandParent edit fired');
}
});
App.ParentView = Ember.View.extend({
click: function() {
console.log('Parent Click Fired!');
},
edit: function () {
console.log('Parent edit fired');
}

});
App.ChildView = Ember.View.extend({
click: function() {
console.log('Child Click Fired!');
},
edit: function () {
console.log('Child edit fired');
}

});​

是否无法在 View 层次结构中委托(delegate)目标处理程序?我不想想做的是:

App.ChildView = Ember.View.extend({
click: function() {
console.log('Child Click Fired!');
},
edit: function () {
console.log('Child edit fired');
this.get('parentView').edit(); //DO NOT WANT TO DO THIS.
}
});​

这是一个jsFiddle作为例子进行测试。

最佳答案

这看起来与您大约一周前发布的问题相同。据我所知,ember 中没有实现这样的功能。该事件被传播到 View 层次结构,但操作名称丢失,并且默认的 click 处理程序被触发。

我发现的唯一解决方法是重新打开 Ember.View 类本身,并重写点击处理程序,如下所示:

Ember.View.reopen({
click: function(event){
if(event.view !== this && this[event.actionName]){
return this[event.actionName](event);
}
}
})

在这里查看 fiddle :

http://jsfiddle.net/Sly7/zZyCS/

关于ember.js - 目标的事件委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13027124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com