【问题标题】:dojo class function override with button click使用按钮单击覆盖 dojo 类功能
【发布时间】:2018-02-12 20:41:00
【问题描述】:

我正在尝试向 dojo 类中的函数添加操作。

打开页面时加载的基类示例。

dojo.provide("nusw.winMgr");
dojo.declare("nusw.winMgr", null, {

constructor: function......

open: function(parm){
   alert("This is the default action of the class");
  }
});

我想改变 open 函数的行为,这样当它被调用时,它会在任何时候调用另一个函数 + 默认映射函数。

对于这个例子,假设我想将以下函数添加到默认打开函数中。

function alert2(){
alert("This is the updated open function class");
}

我期待结果是

警告信息:这是更新的开放函数类

警报消息:这是类的默认操作

这些函数比此处给出的示例更复杂,但这是我想要弄清楚的。

我希望能够在用户单击按钮时调用此脚本来更新默认类函数,因此我会将逻辑放在 javascript 函数中。

我是道场新手

【问题讨论】:

    标签: javascript dojo


    【解决方案1】:

    实际上在dojo 中就像在Javascript 中一样,您始终可以将动态回调函数附加到事件,因此这里将动态回调函数附加到您的小部件的open 事件。

    在这个函数中你以后可以写任何你想写的新逻辑,你甚至可以调用另一个function,然后更新第二个函数。

    例如,您可以这样做:

    var secondFunction = function secondFunction() {
      alert("This is another logic added");
    }
    var openCallback = function openCallback(param) {
      alert("This is the default action of the class");
      secondFunction();
    }
    
    //Then in your widget
    dojo.declare("nusw.winMgr", null, {
       constructor: function......
       open: openCallback()
    });
    

    【讨论】:

    • 如果我对基类所在的文件有更多的读取权限,这将起作用。这就是为什么我试图通过某种覆盖/函数更新来做到这一点
    • @CodeSmack 您能否提供更多详细信息,可以通过注册表或 id 访问此小部件?
    • 我正在使用我无法控制的应用程序,但我需要向现有应用程序添加一些测试功能。我需要找到一种方法来覆盖应用程序的一个基类中的函数。我需要更新函数的行为,但只针对我的组。我确实可以访问应用程序源。他们确实为我提供了一种注入测试更新的方法,到目前为止我已经取得了成功,但我不知道如何覆盖整个应用程序的基类。
    【解决方案2】:

    尝试dojo/aspekt 来完成此操作。它可能看起来像:

    require(["dojo/aspect"], function(aspect){
        aspect.after(baseClassInstance, "open", function(){
            alert("This is the updated open function class");
        });
    });
    

    require(["dojo/aspect"], function(aspect){
        aspect.before(baseClassInstance, "open", function(){
            alert("This is the updated open function class");
        });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      相关资源
      最近更新 更多