2017-08-25 4 views
-1

私はsharepointの拡張機能を開発しています。私はドキュメントライブラリのカスタムコールアウトを実装しようとしていました(ライブラリコンテンツのプレゼンテーション用にfancytreeを使用しています)。 参考として私はhttps://dev.office.com/sharepoint/docs/sp-add-ins/highlight-content-and-enhance-the-functionality-of-sharepoint-hosted-sharepointを使用しました。Sharepoint 2013コールアウトが定義されていません

私は別の関数execCallout(data)でコールアウト機能を定義しました。 (簡略化のために、データを伴う機能は省略されている)。

私は2つの状況を持っています:execCalloutはユーザによって開始/呼び出され(プリロードされたデータはありません)、execCalloutには開始データがロードされます。どちらの場合も、私は同じexecCalloutを使用します。

function execCallout (data) { 
console.log("demo"); 
//get our launchpoint - where callout will appear 
var targetElement = document.querySelectorAll(".fancytree-active.fancytree-focused .fancytree-title")[0]; 


//Configure new Callout 
var calloutOptions = new CalloutOptions(); 
calloutOptions.ID = 'MyCustomCallOut'; 
calloutOptions.launchPoint = targetElement; 
calloutOptions.beakOrientation = 'leftRight'; 
calloutOptions.content = ' My Content'; 
calloutOptions.title = 'My Title'; 

// check for current callout 
var myCallOut = CalloutManager.createNewIfNecessary(calloutOptions); 

//Create custom action for callout 
var myAction = new CalloutActionOptions(); 
myAction.text = 'My Special Action'; 
myAction.onClickCallback = function(event, action) 
{ 
    alert("I can do whatever you want"); 
}; 

var newAction = new CalloutAction(myAction); 

//Add the action to the callout 
myCallOut.addAction(newAction); 
myCallOut.set({ openOptions: { event: "hover" } }); //or click 
myCallOut.open(); 

}

最初のシナリオが正常に動作し、ユーザーのクリックコールアウトが開始され、すなわち、/ execCalloutが呼び出されます。

しかし、プリロードされたデータでは、「Uncaught ReferenceError:myCallOutが定義されていません」と表示されます(デバッガコンソールからは関数が呼び出されていますが、calloutManagerにはlaunchPointに関連付けられたコールアウトはありません)。 calloutManagerが開始されていないかのように見えます。 デバッガコンソールからexecCalloutを起動すると、いつでも問題が修正されます。

アイデア何が欠けているかは歓迎します。

答えて

0

問題について私の疑問:この問題は、ファンシーツリーレンダリングによって引き起こされました。コールアウトは、「ツリー」が完全にレンダリングされていない間に開始されました。デフォルトでは、レンダリング時に値が「失われた」ため、デフォルトのツリーレンダリングが問題を引き起こしていました。

解決策:コールアウト操作の前に手動でツリーレンダリングを開始し、値/変数がなくなった。

関連する問題