3

Dojo フェードイン/アウトを使用して点滅効果を生成しようとしています。

次のコード スニペットは、ウィジェット クラスの宣言内で定義されます。

 _startHighlightEffect : function() {
      var blinkInterval = 5000; //Scope here is that of the parent widget
      window.setInterval ( function() {
              dojo.fadeOut(
              {
                      node: this._headerDiv.domNode,
                      onEnd: function() {
                              dojo.fadeIn({node: this._headerDiv.domNode},3000).play();
                      }
              },3000).play();
      }, blinkInterval);
  },

_highlightEffect : function() {
    this.func = dojo.hitch(this,this._startHighlightEffect);
    this.func();
}

私が直面している問題は、「this._headerDiv は未定義です」ということです。firebug で確認すると、スコープはthis._headerDiv親ウィジェットではなく Window です。

ここで何が欠けているのかを理解するのを手伝ってください。

4

2 に答える 2

3

@jbabeyが説明することは機能しますが、という点ではdojo.hitch、間違った関数で使用しました。に渡される関数をヒッチする必要がありますsetInterval

_startHighlightEffect : function() {
  var blinkInterval = 5000; //Scope here is that of the parent widget

  // hitch the function that will be executed by the setInterval call *********
  window.setInterval (dojo.hitch(this, function() {
          dojo.fadeOut(
          {
                  node: this._headerDiv.domNode,
                  onEnd: dojo.hitch(this, function() {
                          dojo.fadeIn(
                                {node: this._headerDiv.domNode},3000).play();
                  })
          },3000).play();
  }, blinkInterval));
},

_highlightEffect : function() {
  this._startHighlightEffect();
}
于 2012-09-04T14:38:09.343 に答える
2

コンテキストが必要なときにコンテキストを保存し、後で使用できます。

_startHighlightEffect : function() {
      var blinkInterval = 5000; //Scope here is that of the parent widget
      var that = this; // save the scope
      window.setInterval ( function() {
              dojo.fadeOut(
              {
                      node: that._headerDiv.domNode, // use the saved scope
                      onEnd: function() {
                              dojo.fadeIn({node: that._headerDiv.domNode},3000).play();
                      }
              },3000).play();
      }, blinkInterval);
  }
于 2012-09-04T14:32:55.490 に答える