Как разработать расширение Qlik Sense, которое работает в Mashups с несколькими приложениями - PullRequest
0 голосов
/ 04 февраля 2019

Мое расширение не работает в Mashups, который загружает объекты из нескольких приложений.

Кажется, это работает, когда мое расширение происходит из приложения, которое сначала загружается Qlik Sense.Но если мое расширение находится в двух разных приложениях, одно из них работает, а другое - нет.

1 Ответ

0 голосов
/ 04 февраля 2019

TL; DR

Не использовать:

qlik.currApp()

Использовать

qlik.currApp(this)

, чтобы поддержка расширений использовалась в Mashups с несколькими приложениями.

Подробное объяснение

Если вам нужно вызывать функции в приложении за объектом расширения, то вы, вероятно, используете qlik.currApp();

qlik.currApp(), чтобы получить текущее приложениеэто загружено.Это нормально, если в мэшап загружается только одно приложение.Но если есть несколько приложений, qlik.currApp () просто дает вам первое приложение, которое оно загрузило.

Согласно документации Qlik Sense о методе currApp :

qlik.currApp (ссылка)

Получает ссылкук текущему приложению.Используйте метод currApp в расширении, чтобы получить ссылку на приложение, отображаемое в данный момент.

Изображение у вас есть два приложения: A и B. A загружается первым.Затем вы включаете также объект из приложения B в Mashup.Но тип объекта - Расширение, и это расширение использует qlik.currApp(), вероятно, этот объект не будет работать должным образом.Это расширение будет вызывать функции в приложении A, даже если оно из приложения B.

Вы можете указать Qlik, на какое приложение вы хотите сослаться.Для этого вам нужна ссылка на экземпляр расширения.Вы получаете его в качестве ссылки this внутри вашего метода рисования в дополнительном коде:

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

Если у вас есть другое замыкание внутри функции рисования, вам нужно сохранить ссылку this.Если нет, ссылка this перезаписывается внутренним объектом функции.Распространенным случаем является сохранение ссылки this на that:

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

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