2012-04-18 7 views
2

私はEmber.Viewをcontenteditable要素によってトリガーされたイベントを聞き取ろうとしていますが、少し問題があります。Ember.View Contenteditable events

最終的な結果は、内容変更可能な変更をEmber Objectプロパティにバインドすることです。私が置かれている

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") }, 
});​ 

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に指定されたイベントハンドラが呼び出されない飽きない:

イベントが正しくこの答えに与えられた直接ようにjQueryを使ってバインドされていますコンソールには.on()のイベントが記録されているが、Ember.Viewのイベントはログに記録されていないことを示すjsfiddleが表示されます。http://jsfiddle.net/chrisconley/RqSn4/

答えて

2

Emberのイベント名はEmberのような命名規則に変換されているからです。このようなことはpackages/ember-views/lib/system/event_dispatcher.jsで起こります。ご覧のとおり、既存のイベントハンドラの名前をkeyUpfocusInfocusOutに変更する必要があります。

blurpasteはデフォルトでは処理されない他のイベントは、そんなにhttp://jsfiddle.net/pangratz666/CHVRt/

App = Ember.Application.create({ 
    customEvents: { 
     blur: 'blur', 
     paste: 'paste' 
    } 
}); 
+0

感謝を参照して、ためEmber.ApplicationcustomEventsが何であるかthatsの - それは愚かなものだった考え出し。そして、customEventsに関するヒントをありがとう! –

+0

うれしい私は助けることができます。私はemberjs.comでこの命名翻訳に関する文書を見つけていないので、これを修正する必要があります。 – pangratz