SharePoint debug : launchPoint given is already associated with a callout

来源:互联网 发布:e25数据 编辑:程序博客网 时间:2024/05/17 22:41

今天在写SharePoint 2013 callout的时候,发现浏览器报了一个错误:calloutManager: launchPoint given is already associated with a callout

代码很简单:

    var calloutElement = document.getElementById(divId);    var calloutOptions = new CalloutOptions();    calloutOptions.ID = 'calloutid';    calloutOptions.launchPoint = calloutElement;    calloutOptions.beakOrientation = 'leftRight';    calloutOptions.content = 'This is Callout Description';    calloutOptions.title = 'This is Callout Title';    CalloutManager.createNew(calloutOptions);  

错误信息很明显,应该是我重复向一个div绑定callout引起的,最简单的解决办法是try catch捕获这个异常:

try{    CalloutManager.createNew(calloutOptions);}catch(e){}

然后我查看了一下CalloutManager的代码,发现可以使用这个方法判断一个div是否已经绑定了一个callout:

var callout = CalloutManager.getFromLaunchPointIfExists(launchPoint);
方法getFromLaunchPointIfExists的参数launchPoint就是div对象,如果返回值callout不为空,就说明这个div已经绑定了callout了。

除此之外,CalloutManager其实已经提供了一个方法处理重复绑定的问题,这个方法是createNewIfNecessary,这个方法会首先使用getFromLaunchPointIfExists方法判断div上是否已经绑定了callout,如果已经绑定,就不会再次绑定了,所以正确的代码是使用createNewIfNecessary而不是createNew:

    var calloutElement = document.getElementById(divId);    var calloutOptions = new CalloutOptions();    calloutOptions.ID = 'Calloutid';    calloutOptions.launchPoint = calloutElement;    calloutOptions.beakOrientation = 'leftRight';    calloutOptions.content = 'This is Callout Description';    calloutOptions.title = 'This is Callout Title';    CalloutManager.createNewIfNecessary(calloutOptions);

这样就不会出现异常信息了。


0 0