如何开发可在具有多个应用程序的混搭中使用的Qlik Sense Extension

时间:2019-02-04 20:39:59

标签: qliksense

我的扩展程序无法在从多个应用程序加载对象的混搭中使用。

当我的扩展程序来自Qlik Sense首先加载的应用程序时,它似乎起作用。但是,如果我的扩展程序在两个不同的应用程序中,则其中一个有效,而另一个无效。

1 个答案:

答案 0 :(得分:1)

TL; DR

请勿使用:

qlik.currApp()

使用

qlik.currApp(this)

使您的扩展支持在具有多个应用的​​混搭中使用。

详细说明

如果您需要在扩展对象后面的应用程序上调用函数,则可能使用qlik.currApp();

qlik.currApp()为您提供当前已加载的应用程序。如果仅将一个应用程序加载到混搭中,那就很好。但是,如果有多个应用程序,则qlik.currApp()只会为您提供第一个已加载的应用程序。

  

根据Qlik Sense Documentation on the currApp method

     
    

qlik.currApp(参考)

         

获取对当前应用程序的引用。在     扩展程序以获得对当前显示的应用程序的引用。

  

图像有两个应用程序:A和B。首先加载A。然后,您还将App B中的对象包含到Mashup中。但是对象的类型是扩展名,并且该扩展名使用qlik.currApp(),很可能该对象无法正常工作。该扩展将调用应用A上的函数,即使它来自应用B。

您可以告诉Qlik您要引用哪个应用程序。为此,您需要引用扩展实例。您可以在扩展代码中的paint方法中将其作为此引用:

paint: function(§element, layout){
    var app = qlik.currApp(this);
    // [...]
}

如果paint函数内部还有另一个闭包,则需要保存this引用。如果不是,此引用将被内部函数对象覆盖。常见的情况是将this引用保存到that

paint: function(§element, layout){
    var that = this;

    loader.load(assets, function(){
        var app = qlik.currApp(that);
        // [...]
    });
}