2010-11-29 56 views
0

开发环境:HP/Palm WebOS,带SDK 1.4.5.465的Eclipse,Win7如何声明和监听自定义事件?

我有一个类,我想声明并在某些情况下触发一个事件。然后,在相应的阶段,助理倾听该事件,并在提出时做一些事情。

阅读引用我遇到过Mojo.Event.make,Mojo.Controller.stageController.sendEventToCommanders,Mojo.Event.send和我认为与我想要实现的内容有关的一些内容,但是我没有找到一个特别的例子(声明,解雇和聆听)。为了澄清,我想触发的事件与一个小部件或一个带有id的html标记无关。

回答

0

Mojo.Event依赖于作为HTML文档中的节点/元素的事件的发起者。从我可以告诉的是,没有为DOM环境以外的事件建立库,所以在这一点上,你必须实现你自己的。根据多么复杂的情况是,你可能能够得到一种方法只创建你正在听的对象上的属性,并存储该得到一个函数的调用未来某一时间:

ListeningObject = Class.create({ 
    initialize:function(){ 
    // instantiate instance of Subject 
    var subject = new Subject(); 

    // set the onEvent property of subject to an instance of this.onEvent bound to 
    // a this instance of Listening object's context. 
    subject.onEvent = this.onEvent.bind(this); 

    subject.doSomethingAwesome(); 
    }, 
    onEvent:function(){ 
    Mojo.Log.info("This get's called from the object we're listening to"); 
    } 
}); 

Subject = Class.create({ 
    doSomethingAwesome:function(){ 
    // does stuff, maybe an ajax call or whatever 
    // when it's done you can check if onEvent is a function and then 
    // you can call it, we'll use setTimeout to simulate work being done 
    setTimeout((function(){ 
     if(Object.isFunction(this.onEvent)) this.onEvent(); 
    }).bind(this), 200); 
    }, 
    onEvent:null 
}); 

// instantiate an instance of ListeningObject to see it in action 
var listening_object = new ListeningObject; 

的这种模式最大的局限性在于,只能有一个对象倾听特定事件,但在某些情况下,您只需要这些。