Forum Discussion

godd4k's avatar
godd4k
Regular Visitor
8 years ago
Solved

Events only triggered once [Dashboard confirmed]

I've started implementing some functionality using the tileClicked event on an embedded dashboard, it works great but the event is only triggered once and then never again.

 

Here's a watered down version of things I used for a sanity check:

var embeddedDashboard = powerbi.embed({{myElem}}, {{myConfig}});
embeddedDashboard.on('tileClicked', function (event) {
  console.log('tile clicked event', event);
});

This will log once but never again.

  • godd4k's avatar
    godd4k
    8 years ago

    v-ljerr-msft

    I should have updated this post, the problem was actually that empty DOM elements were infront of my dashboard element and so I was never actualy clicking on the tile after the first time (where they get added), it just looked like it. Bit of a rookie mistake really, I clearly wasn't thinking but it's all working now.

    FYI though, you are able to have multiple listeners for the same event on an element.

    For example

     

    var embeddedDashboard = powerbi.embed({{myElem}}, {{myConfig}});
    embeddedDashboard.on('tileClicked', function (event) {
      console.log('tile clicked event', event);
    });
    embeddedDashboard.on('tileClicked', function (event) {
    console.log('I would log after the above console log');
    });

     

    Using off

     

    var embeddedDashboard = powerbi.embed({{myElem}}, {{myConfig}});
    embeddedDashboard.on('tileClicked', function (event) {
      console.log('You will never see me', event);
    });
    embeddedDashboard.off('tileClicked);
    embeddedDashboard.on('tileClicked', function (event) {
    console.log('You would see me though!');
    });

     

    var embeddedDashboard = powerbi.embed({{myElem}}, {{myConfig}});
    embeddedDashboard.on('tileClicked', function (event) {
      console.log('You will never see me', event);
    });
    embeddedDashboard.on('tileClicked', function (event) {
    console.log('Or me!');
    });
    embeddedDashboard.off('tileClicked');

     

2 Replies

  • v-ljerr-msft's avatar
    v-ljerr-msft
    Microsoft Employee

    Hi godd4k,

     

    According to your description above, I just tested the tileClicked event with Microsoft Power BI Embedded Sample. And the tileClicked event can be triggered more that once(every time I clicked a tile on the dashboard).

     

    I assume you may need to firstly remove the tileClicked event handler if it already exists to make it work in this scenario.:smileyhappy:

    var embeddedDashboard = powerbi.embed({{myElem}}, {{myConfig}});
    //.off removes a given event handler if it exists. embeddedDashboard.off("tileClicked"); embeddedDashboard.on('tileClicked', function (event) { console.log('tile clicked event', event); });

     

    Regards

    • godd4k's avatar
      godd4k
      Regular Visitor

      v-ljerr-msft

      I should have updated this post, the problem was actually that empty DOM elements were infront of my dashboard element and so I was never actualy clicking on the tile after the first time (where they get added), it just looked like it. Bit of a rookie mistake really, I clearly wasn't thinking but it's all working now.

      FYI though, you are able to have multiple listeners for the same event on an element.

      For example

       

      var embeddedDashboard = powerbi.embed({{myElem}}, {{myConfig}});
      embeddedDashboard.on('tileClicked', function (event) {
        console.log('tile clicked event', event);
      });
      embeddedDashboard.on('tileClicked', function (event) {
      console.log('I would log after the above console log');
      });

       

      Using off

       

      var embeddedDashboard = powerbi.embed({{myElem}}, {{myConfig}});
      embeddedDashboard.on('tileClicked', function (event) {
        console.log('You will never see me', event);
      });
      embeddedDashboard.off('tileClicked);
      embeddedDashboard.on('tileClicked', function (event) {
      console.log('You would see me though!');
      });

       

      var embeddedDashboard = powerbi.embed({{myElem}}, {{myConfig}});
      embeddedDashboard.on('tileClicked', function (event) {
        console.log('You will never see me', event);
      });
      embeddedDashboard.on('tileClicked', function (event) {
      console.log('Or me!');
      });
      embeddedDashboard.off('tileClicked');