2

コンテンツ編集可能な要素によってトリガーされたイベントをEmber.Viewでリッスンしようとしていますが、少し問題があります。

私が目指している最終結果は、コンテンツ編集可能な変更をEmberObjectプロパティにバインドすることです。

この回答に示されているように、イベントはjQueryを直接使用して正しくバインドされます:contenteditablechangeevents

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

.on()イベントがコンソールに記録されていることを示すjsfiddleをまとめましたが、Ember.Viewのイベントはそうではありません:http: //jsfiddle.net/chrisconley/RqSn4/

4

1 に答える 1

2

これは、Ember のイベント名がより Ember に似た命名規則に変換されているためです。これはpackages/ember-views/lib/system/event_dispatcher.jsで発生します。ご覧のとおり、既存のイベント ハンドラーの名前をkeyUpfocusInおよびに変更する必要がありfocusOutます。

他のイベントはデフォルトでは処理されませんblur。それが目的です。http://jsfiddle.net/pangratz666/CHVRt/pastecustomEventsEmber.Application

App = Ember.Application.create({
    customEvents: {
        blur: 'blur',
        paste: 'paste'
    }
});
于 2012-04-18T16:10:40.677 に答える