2014-03-19 52 views
3

哪些是在SAPUI5/OpenUI5定義自定義僞事件的最佳實踐?SAPUI5定製僞事件

例如,讓我們說,我想和按幾秒鐘,當上擴展sap.m.Button觸發事件。

+0

你檢查,這已經:HTTPS://sapui5.netweaver.ondemand。 com/sdk /#docs/guide/EventsInControls.html –

回答

6

我不知道是否有還沒有任何「最佳實踐」,我真的覺得這裏只有「一」的做法;-)但我渴望學習其他任何需要,因此,如果任何人都可以在此發表評論,請不要猶豫!

我覺得一般的想法是隻是定義您的事件;所述UI5框架然後自動生成用於登記方法(attach<YourEvent>),去註冊(detach<YourEvent>)和觸發事件(fire<YourEvent)。

例如:

sap.ui.core.Control.extend("your.custom.Control", { 
     metadata : { 
      properties : { 
       // etc... 
      }, 

      aggregations : { 
       // etc... 
      }, 

      associations: { 
       _myButton : {type : "sap.ui.commons.Button", multiple : false, visibility: "hidden"}, 
       // etc... 
      }, 

      events : { 
       yourCustomEvent : {enablePreventDefault : true} 
      } 
     }, 

     init : function() { 
      var oControl = this, oMyButton; 

      oMyButton = new sap.ui.commons.Button({ 
       text: "Press me", 
       press: function (oEvent) { 
        oControl.fireYourCustomEvent({ 
         passAlong : "Some dummy data to pass along" 
        }); 
       } 
      }); 
      this.setAggregation("_myButton", oMyButton); 
     }, 

     // etc... 

     renderer : { 
      render : function(oRm, oControl) { 
       oRm.write("<div"); 
       oRm.writeControlData(oControl); 
       oRm.write(">"); 

       //content shows button which fires custom event 
       oRm.write("<div>"); 
       oRm.renderControl(oControl.getAggregation("_myButton")); 
       oRm.write("</div>"); 

       oRm.write("</div>"); 
      } 
     } 
    }); 

希望這個解釋有點

2

對於自定義事件,您可以wrap jquery events

因此,使用通用的模式這樣可以遵循:

events: { 
    someEvent: {} 
} 

onBeforeRendering 
    var domNode = this.getDomRef(); 
    $(domNode).unbind('someEvent') 

onAfterRendering 
    var self = this, domNode = this.getDomRef(); 
    $(domNode).bind('someEvent', function() { 
     self.fireSomeEvent({ 
      customProp: customValue 
     }) 
    }); 

控制可以做這樣的事情的一個客戶:

new CustomControl({ 
    someEvent: function(o) { 
     alert('customProp: ' + o.getParameter('customProp')); 
    } 
}) 
1

的建議/最佳實踐是使用諸如jQuery.bind註冊事件(和使用jQuery.unbind(),以避免存儲器泄漏刪除)。

找到其他信息(蒂姆的評論複製):https://sapui5.netweaver.ondemand.com/sdk/#docs/guide/91f1b3856f4d1014b6dd926db0e91070.html

........
好運

+2

對於瀏覽器事件和控件事件,這將起作用。然而,最初的問題是關於僞事件,並且 - 從您提供的鏈接 - 提到:*僞事件在語義上是豐富的,並且可以通過僅實現一個方法來處理。他們**不能**用於jQuery.bind()* – Qualiture

+0

你是對的。我錯過了那個虛假的部分。當我們說psuedo時,我們是指那些來自瀏覽器的事件,但沒有被jQuery(或框架)實現?是對的嗎?當它說這些事件在語義上豐富時,誰在豐富? – Gana