나는 Enyo에서 이벤트가 어떻게 발생하는지 알고 싶어합니다. 두 개의 자식 노드가있는 부모 노드가있는 간단한 DOM 트리를 말하십시오. 내가 원하는 것은 자식 1에서 자식 2로 생성 된 사용자 지정 이벤트를 전파하는 것입니다.이 예제를 만들었습니다. enyo.dispatch (e)와 target.dispatchEvent (e) 사이의 동작 차이 웹 API
enyo.kind({
name: "MySample",
kind: "moon.Panels",
classes: "moon",
pattern:"activity",
components: [{kind: "moon.Panel",
title: "Hello World!",headerComponents: [
{kind: "moon.IconButton", src: "assets/icon-like.png"}
],
components: [
{kind: "moon.Input",placeholder: "type time",onchange :"handleInput"},
{kind:"ClockSample", name:'time'}
]}
],
handleInput: function(inSender, inEvent) {
// body...
var val=inSender.getValue();
var evt = document.createEvent("Event");
evt.initEvent("myEvent",true,true);
evt.val=val;
var target=this.$.time.hasNode();
target.dispatchEvent(evt);
//enyo.dispatcher.dispatch(evt);
}
});
enyo.kind({
name: "ClockSample",
components: [
{kind: "moon.Clock", name:"clock"}
],
create:function(){
this.inherited(arguments);
enyo.dispatcher.listen(document, "myEvent", this.bindSafely(this.myEventHandler));
},
myEventHandler: function(inSender, inEvent) {
// body...
this.$.clock.setDate(new Date(inSender.val));
}
});
new MySample({fit:true}).renderInto(document.body);
내가 "target.dispatchEvent (EVT)"를 사용하고, 예상되는 날짜 형식 (예 : 2015년 1월 1일 9시 8분 7초)를 입력하려고하면
, 시계의 시간을 설정합니다 동일하지만 행동은 "enyo.dispatcher.dispatch (evt)"를 사용하려고하면 유사하지 않습니다.같은 점을 달성하고 차이점을 이해하고 도와주세요.
자세한 정보를 가져 주셔서 감사합니다. 캡슐화/데이터 숨기기를 유지하는 것이 매우 필요하다는 의도가 있습니다. 하지만 어떻게 신호를 사용하거나 DOM 트리 위로 이벤트를 버블 링하여 데이터 캡슐화를 유지하는 데 도움이되는지 잘 모르겠습니다. 더 자세히 설명해 주시겠습니까? –
신호 메커니즘은 구독자가 구독 할 수있는 브로드 캐스트 메시지입니다. 메시지를 버블 링 할 위치를 알 필요가 없으며 구독자에게만 전달되기 때문에 버블 링 메커니즘보다 낫습니다. – Pre101