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

How to develop a Qlik Sense Extension that works in Mashups with multiple apps

我的扩展在从多个应用程序加载对象的混搭中不起作用。

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

TL;DR

不要使用:

qlik.currApp()

请使用

qlik.currApp(this)

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

详细说明

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

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

According to the Qlik Sense Documentation on the currApp method:

qlik.currApp(reference)

Gets a reference to the current app. Use the currApp method in an extension to get a reference to the app currently displayed.

假设您有两个应用程序:A 和 B。首先加载 A。然后,您还将 App B 中的一个对象包含到混搭中。但是对象的类型是一个Extension,而那个extension使用qlik.currApp(),很可能这个对象不能正常工作。该扩展程序将调用应用程序 A 上的功能,即使它来自应用程序 B。

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

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

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

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

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