3

我正在尝试使用 dojo fadeIn/Out 产生闪烁效果。

以下代码片段在小部件类的声明中定义:

 _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 回答