polymer как установить свойство элемента из области обработчика событий

#javascript #polymer #polymer-1.0

#javascript #polymer #polymer-1.0

Вопрос:

я не совсем могу понять, как .set() получить свойство для моего элемента polymer из обработчика событий из сторонней библиотеки (fabricjs). Например:

 <dom-module id="x-example">
  <template>
    <div id="objectTools" hidden$="{{objectToolsHidden}}">
      <h1> object toolz!</h1>
    </div>
    <canvas id="c" width="400" height="400"></canvas>
  </template>
  <script>
  Polymer({
    is: 'x-example',
    properties: {
      canvas: Object,
      objectToolsHidden: {
        type: Boolean,
        notify: true,
        value: true
      }
    },
    _onObjectSelected: function(e){
        //hmm, this is the canvas elem... (???)
        this.set('objectToolsHidden', false);
    },
    _onSelectionCleared: function(e){
        this.set('objectToolsHidden', true);
    },
    ready: function(){
      this.canvas = new fabric.Canvas(this.$.c);
      var rect = new fabric.Rect({
          top : 100,
          left : 100,
          width : 60,
          height : 70,
          fill : 'black'
      });

      this.canvas.add(rect);

      this.canvas.on({
       'object:selected': this._onObjectSelected,
       'selection:cleared': this._onSelectionCleared
      });
    }
  });
  </script>
</dom-module>
  

…метод _onObjectSelected вызывается, но this.set() не определен как функция. Как мне получить доступ к своему свойству элемента из обработчика событий области видимости?

кроме того, jsfiddle:http://jsfiddle.net/ysoo8mjg /

Ответ №1:

о!! я могу использовать .bind(this) при регистрации обработчика событий

   this.canvas.on({
   'object:selected': this._onObjectSelected.bind(this),
   'selection:cleared': this._onSelectionCleared.bind(this)
  });
  

https://jsfiddle.net/edwardsharp/9foteodx/8/