2017-08-03 17 views
1

sap.m.Popoverをいくつかのコントロールの「リッチツールチップ」として使用しようとしています。これは、sap.ui.commonsライブラリが非推奨になったため、SAPの推奨によるものです。標準の文字列ツールチップに追加したいテキストが多すぎます。私はポップオーバーをツールチップとして直接使用する方法を考え出していないので、TooltipBaseコントロールをポップオーバーを処理するように拡張しました。ポップオーバーをツールチップとして使用するSAPUI5

私は、私は私のコントロールと対話するときしかし、私は次のエラーを取得する、細かい作業ポップオーバーを持っている:

Uncaught Error: failed to load 'myNewToolTip/controls/TooltipBaseRenderer.js' from ../controls/TooltipBaseRenderer.js: 404 - Not Found

私はTooltipBaseクラスは抽象クラスであるため、それがあることをこれらのthreadsから見ますしたがって、レンダラーはありません。しかし、私は既にポップオーバーを使用しているので、何もレンダリングする必要はありません。私はTooltipBaseRenderer.jsを追加しようとしましたが、ただ空のレンダリングクラスがあります。しかし、UI5はそれを本当に好きではありません。

私の質問は、私が何をしますか、私は2つのオプションが表示されます。

  • ツールチップとしてポップオーバーを使用する簡単な方法は、おそらくあり、私は(に留めて把握するあまりにも愚かです私はXMLビューで直接バインドしたいと思っています)。
  • レンダラーコールを抑制する方法を解説します。私はそれを必要としません。

これは、カスタムコントロールのための私の現在のソースコードです:

sap.ui.define([ 
    "sap/m/Popover" 
], function (Popover) { 
    "use strict"; 

    return sap.ui.core.TooltipBase.extend("myNewToolTip.TooltipBase", { 
    metadata: { 
     properties: { 
     title : {} 
     }, 
     events: { 
     "onmouseover" : {}, 
     "onmouseout" : {} 
     } 
    }, 

    oView: null, 
    setView: function(view) { 
     this.oView = view; 
    }, 

    onmouseover : function(oEvent) { 
     var that = this; 
     if (!this.delayedCall){ 
     this.delayedCall = setTimeout(function() { 
      if (!that.oPopover){ 
      that._createQuickView(); 
      } 
     }, 500); 
     } 
    }, 

    onmouseout: function(oEvent) { 
     if (this.oPopover){ 
     this.closePopover(); 
     this.delayedCall = undefined; 
     } 
     else{ 
     clearTimeout(this.delayedCall); 
     this.delayedCall = undefined; 
     } 
    }, 

    _createQuickView: function() { 
     var sTitle = this.getTitle(); 
     this.oPopover = new Popover({ 
     title: sTitle 
     }); 
     this.oPopover.openBy(this.getParent()); 
    }, 

    closePopover: function(){ 
     this.oPopover.close(); 
     this.oPopover = undefined; 
    } 
    }); 
}); 

答えて

0

ちょうどマウスオーバーでポップオーバーを表示するカスタムコントロールを作成する必要はありません。あなたが言ったように、簡単な方法があります:Adding event delegates

events that delegates can listen toの一つは次のように達成することができるonmouseoverある:ここ

targetControl.addEventDelegate({ 
    onmouseover: function() { 
    // open popover 
    } 
}); 

ツールチップのように挙動ポップオーバーの例である:https://embed.plnkr.co/jAFIHK/


Bear in mind, I'd prefer to bind it directly in the XML view.

するためにポップオーバーをXMLViewに直接追加すると、ターゲットコントロールのdependents aggregationに定義できます。 CTS:ビューがロードされるとき

  • ポップオーバーがすぐに表示されません。..
  • しかし、まだ親からのすべてのデータバインディングを継承します。
  • また、ライフサイクルは親コントロールによって自動的に管理されます(明示的に破棄する必要はありません)。

ただし、イベント代理人はまだJS経由で追加する必要があります。

+0

提案していただきありがとうございます。できます。しかし、これをコンボボックスに追加してドロップダウンをクリックすると予期しない動作が発生します。 私の痛みを説明するこのリンクも見つかりました https://github.com/SAP/openui5/issues/1612 –

+0

コンボボックスについては、popoverが既にマウスオーバーで動作しているので、別の質問をします。あなたのコードとスクリーンショットであなたの問題を完全に説明してください。私は見てみましょう。TooltipBaseについて:私は感情を理解していますが、私の経験では、Fioriの言い方では「もう* rich *ツールチップを使用しないでください」と述べています.-アクセシビリティ上の理由から(https://medium.com/salesforce-すべてのデザイナーが必要とするアクセシビリティ(64f105f0881b#8e05)と[発見不能](https://experience.sap.com/fiori-design-web/using-tooltips) /#応答性と適応性)。 – boghyon

+0

@JakobMariusKjær(Popoverを使用しないで)TooltipBaseを拡張することを検討している場合は、この最小限の例を見てください:https://embed.plnkr.co/33zFqa/ – boghyon

関連する問題