我正在尝试让Ember.View监听由可满足元素触发的事件,但遇到了一点小麻烦。
我想要的最终结果是将可内容编辑的更改绑定到Ember对象属性。
可以直接使用jQuery正确绑定事件,如以下答案所示:contenteditable change events
$(function () {
$(document).on('focus', '[contenteditable]', function(event) {
var $this = $(this);
console.log("$" + event.type);
return $this;
});
$(document).on('blur keyup paste', '[contenteditable]', function(event) {
var $this = $(this);
console.log("$" + event.type);
return $this;
});
});但是在Ember.View上指定的事件处理程序永远不会被调用:
App.ContentEditable = Ember.View.extend({
item: App.Item.create({name:"Editable content"}),
tagName: "span",
contenteditable:"true",
attributeBindings: ["contenteditable"],
// Only event that gets triggered
click: function(){ console.log("click") },
// None of these events are triggered
focusin: function(){ console.log("focusin") },
focusout: function(){ console.log("focusout") },
keyup: function(){ console.log("keyup") },
blur: function(){ console.log("blur") },
paste: function(){ console.log("paste") },
});我已经组合了一个jsfiddle,它显示.on()事件被记录到控制台,但是Ember.View上的事件没有被记录:http://jsfiddle.net/chrisconley/RqSn4/
发布于 2012-04-19 00:10:41
这是因为Ember中的事件名称被转换为更类似于Ember的命名约定。这种事情发生在packages/ember-views/lib/system/event_dispatcher.js中。如您所见,您必须将现有的事件处理程序重命名为keyUp、focusIn和focusOut。
默认情况下不会处理其他事件blur和paste,这就是Ember.Application上的customEvents的作用,请参阅http://jsfiddle.net/pangratz666/CHVRt/
App = Ember.Application.create({
customEvents: {
blur: 'blur',
paste: 'paste'
}
});https://stackoverflow.com/questions/10213252
复制相似问题