如何开发可在具有多个应用程序的混搭中工作的 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);
// [...]
});
}
我的扩展在从多个应用程序加载对象的混搭中不起作用。
当我的扩展程序来自 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);
// [...]
});
}