【问题标题】:dojo function with multiple contexts具有多个上下文的 dojo 函数
【发布时间】:2013-04-03 21:13:31
【问题描述】:

我有一个使用dojo/_base/declare 创建的dojo 类,其中包括一个onClickHandlerdijit/form/Button 使用此处理程序来处理存储在类中的数据。我需要处理程序能够引用触发事件的Button 和处理程序所属的类的实例。

例如,下面是类中处理函数的第一部分:

drawToolClick : function(evt) {

    this.drawingtoolbar.deactivate(); // Here `this` should represent the instance of my class

    var parent = this.getParent(); // Here `this` should represent the button that was clicked

我知道我显然不能用this来表示两者,但是当我使用dojo/_base/langhitch我的类实例到函数时,我不知道点击了哪个按钮(我有多个按钮使用相同的处理程序,因为它们代表enum)。如果我省略了 hitch this 引用了被点击的按钮,但我不知道如何获取处理程序所属的类的实例。

有没有更好的方法来做到这一点?

【问题讨论】:

  • 上课的目的是什么?如果它是一个 UI 类,那么你可以 subclass Button 代替吗?如果它是 model 数据,那么您确定应该将点击处理程序附加到它,因为点击处理程序是 UI。
  • 这个类基本上是我最初以非AMD风格编写的所有函数和变量,我通过将其包装成一个类将其转换为AMD。我不会说它遵循任何旨在将 UI 与数据与功能(即 MVC)分离的特定模式。我的应用程序是一个网络地图应用程序,所以这个类代表了使用我正在使用的地图 API 所需的所有代码。这就是我在这个类中放置onclick 处理程序的原因,因为处理程序中的代码操作地图。

标签: javascript event-handling dojo dom-events


【解决方案1】:

所以,我终于想通了。我只是在我的模块中添加了一个变量var self;,该类在declare 语句之前定义。然后,在我的课堂constructor 函数中,我添加了self = this;

然后在我的onclick 处理程序中,我使用this 来引用被点击的按钮,我使用self 来引用类实例。

这似乎没问题。

【讨论】:

    猜你喜欢
    • 2016-05-10
    • 2015-10-09
    • 2023-03-22
    • 2012-05-05
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多