Dojo AMD:无法在 require 中调用函数

2023-11-23

我确实是 dojo 的新手,但当我开始使用 dojo 版本 1.7.2 开发新应用程序时,我也想使用新的 AMD 函数语法。不幸的是我似乎不明白。 :-(

最让我烦恼的是我不能简单地调用“require”块内的任何函数。 例如,我有一个页面,打开时会创建一个动态表,每行中有几个小部件。 然后我有一个按钮,每次按下都会添加一个空行。

如果没有 AMD 语法,这将很容易:
- 将我所有的“dojo.require()”放在 HEAD 中
- 然后创建一堆我自己的函数来创建表格和小部件
- 添加行函数可以轻松访问我之前的函数填充的任何全局变量

但使用 AND 时是这样的:

初始函数创建表和小部件:

function fillReportTable(repId) {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
     function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
   // a lot of code to create the table, consisting of SEVERAL functions 
   function createNewRow(tbl) { ...} 
   function function1 () {... } 
   function function2 () {... } 
   function function3 () {... } 
}

现在,“添加空行”按钮调用其自己的函数“addEmptyRow”。
但在这个函数中我必须:
- 再次对每个 dojo 模块执行其他要求
- 我无法使用“fillReportTable”函数“内部”的任何函数。例如“createNewRow”函数

 function addEmptyRow() {
require(["dojo/dom-construct", "dojo/dom-attr", "dijit/form/FilteringSelect",
"dojo/data/ItemFileReadStore", "dijit/form/ComboBox", "dijit/form/DateTextBox", "dijit/form/Select", "dojo/store/Memory"],
     function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {
// a lot of code to create the table, consisting of SEVERAL functions
}

对于 AMD 来说,这一切似乎都非常复杂。
或者我在这里遗漏了一些明显的东西?
使用AMD,如果您将代码分成许多小函数,您是否会在每个函数中重新执行“require”?或者您是否将所有功能都放在一个“require”中并包含完整列表?
如果您采用第二种方式,如何从小部件事件中调用这些函数?


最简单的方法是定义您自己的模块。先看一下这个教程:

http://dojotoolkit.org/documentation/tutorials/1.7/modules/

现在定义您自己的模块,例如“./js/mymodules/mymodule.js”(相对于 HTML 页面):

define([
    "dojo/dom-construct",
    "dojo/dom-attr",
    "dijit/form/FilteringSelect",
    "dojo/data/ItemFileReadStore",
    "dijit/form/ComboBox",
    "dijit/form/DateTextBox",
    "dijit/form/Select",
    "dojo/store/Memory"
], function (domConstruct, domAttr, FilteringSelect, ItemFileReadStore, ComboBox, DateTextBox, Select, Memory) {

    function fillReportTable(repId) {
       // a lot of code to create the table, consisting of SEVERAL functions 
       function createNewRow(tbl) { ...} 
       function function1 () {... } 
       function function2 () {... } 
       function function3 () {... } 
    }

    function addEmptyRow() {
       // a lot of code to create the table, consisting of SEVERAL functions
    }

    // Return an object that exposes two functions
    return {
        fillReportTable: fillReportTable,
        addEmptyRow: addEmptyRow
    }

});

并像这样使用你的模块:

<html>

<head>

<script>
var dojoConfig = {
    baseUrl: "./js/",
    packages: [
        { name: "dojo", location: "lib/dojo" },
        { name: "dijit", location: "lib/dijit" },
        { name: "dojox", location: "lib/dojox" }
    ]
};
</script>

<script data-dojo-config="async: true" src="js/lib/dojo/dojo.js"></script>

</head>

...

<script>
require([
    "mymodules/mymodule"
], function (mymodule) {
    mymodule.fillReportTable(...);
    mymodule.addEmptyRow(...);
});
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dojo AMD:无法在 require 中调用函数 的相关文章

随机推荐

  • app:srcCompat - 矢量可绘制对象显示在设计预览中,但不显示在应用程序中

    可绘制 信息 xml
  • scipy logsumexp() 是否可以处理下溢挑战?

    scipy 有吗logsumexp 实现包括通过从每个元素中减去数组中找到的最大值来防止下溢的黑客 下面解释的 其中m maxval 您可以检查定义的源代码logsumexp here 请注意 有一个指向源的链接文档页面 你会看到的 a m
  • div滚动条宽度

    有没有一种简单的方法可以使用 javascript jquery 获取滚动条的宽度 我需要获取溢出的 div 的宽度 滚动条的宽度 谢谢 如果您使用 jquery 请尝试以下操作 function getScrollbarWidth var
  • 使用 HTML 更改浏览器顶部(favicon)

    使用 HTML 查看图像时 如何更改浏览器选项卡中显示的小图像 抱歉 我是编程新手 小图像就是我所说的 它被称为favicon 将 favicon ico 文件放在 www 根目录中并使用以下代码
  • 用于查找小数/浮点数的正则表达式?

    我需要一个十进制 浮点数字的正则表达式 例如 12 12 2 1236 32 123 333 和 12 00 或 12 00 或 123 123 以便在 javascript 和 jQuery 中使用 谢谢 可选地在开头匹配 或 后跟一个或
  • 如何让对话框样式的活动窗口填满屏幕?

    我正在使用一个带有对话框主题集的活动 并且我希望它是全屏的 我尝试了各种各样的方法 甚至通过 WindowManager 手动将窗口扩展到完整的宽度和高度 但没有任何效果 显然 对话框窗口 或具有对话框主题的活动 只会根据其内容扩展 但即使
  • 如何在 readthedocs 上记录 cython 函数

    On 阅读文档我不被允许编译cython扩展 是否可以配置sphinx为了从中提取文档字符串cython文件而不实际编译它们 thanks 我遇到了同样的问题 发现现在可以在 readthedocs 上编译 Cython 扩展 简短回答 可
  • “__cplusplus”宏扩展为什么?

    C 宏有什么作用 cplusplus包含并扩展到 有没有宏 cplusplus即使在最古老的 C 实现中 也始终包含并扩展为numeric value 使用安全吗 if cplusplus或者我们应该用它来代替 ifdef cplusplu
  • Mac 开发的 PyObjc 与 RubyCocoa:哪个更成熟?

    我一直想尝试一下 Ruby 或 Python 同时我也一直想做一些 Cocoa 编程 因此 我认为实现这两个目标的最佳方法是使用 Ruby 或 Python 到 Objective C 的桥梁 PyObjc 或 RubyCocoa 来开发一
  • Quartz Scheduler 关闭后不停止

    我在 jboss 4 0 5 上使用当前最新的quartz 1 8 3 石英作业是持久的并保存到本地数据库中 当我在执行的石英调度程序对象上调用 shutdown 或standby 方法时 作业仍然由调度程序继续执行 只是作业状态为空并且执
  • 状态 Property 中的令牌 PropertyName 将导致无效的 JSON 对象。使用自定义 JsonConverter

    我正在尝试使用 Json NET 和自定义序列化程序序列化 反序列化 NET 数据集 我知道你们中的许多人会告诉我不要这样做 我在其他帖子上看到过这一点 我有充分的理由并希望继续沿着这条路走 我的序列化基于以下事实 NET DataSet
  • 获取 Django url 模板标签中 javascript 变量的值

    众所周知 有一种通过使用 django 模板标签 url 定向到 URL 的 DRY 方式 例如 url someview arg1 X 在这里 我希望 X 是 JavaScript 变量的值 例如tmp 但以下不起作用 我应该如何获取模板
  • 使用 AutoMapper 映射未知类型

    我在用着AutoMapper将一个对象的属性复制到另一个对象 这是我的代码 Get type and create first object Type itemType Type GetType itemTypeName var item
  • Android 6.0 Adb wifi 连接

    我有一台装有 Android 6 0 的 Nexus 6 设备 库存版本无需 root 为了避免用 USB 电缆永久连接设备 我使用了这个程序 我通过 USB 电缆将设备连接到 PC 在终端上输入adb tcpip 5555 type ad
  • 以字符串形式返回 Matplotlib 图像

    我在 django 应用程序中使用 matplotlib 想直接返回渲染的图像 到目前为止我可以走plt savefig 然后返回图像的位置 我想做的是 return HttpResponse plt renderfig mimetype
  • 使用正则表达式 re.sub 删除指定单词之前的所有内容(包括指定单词)

    我有一个字符串 看起来像 Blah blah blah 更新 2012 年 8 月 23 日 我想使用正则表达式从中提取日期Aug 23 2012 我在书库里找到一篇文章 内容类似 正则表达式删除字符之前的所有文本 但是当我尝试时这也不起作
  • Windows 上的信号处理

    我有一个独立的 PHP 脚本 我将处理从 Windows 操作系统发送的信号 以便在发出 终止信号 时正常关闭 我怎样才能在 Windows 上做到这一点 2020 年 3 月更新 从 PHP 7 4 开始 有sapi windows se
  • IBM Websphere:Spring AOP 出现错误

    我在启动服务器时收到以下错误 应用程序中包含 Spring 和 AspectJ 类 Caused by java lang VerifyError JVMVRFY013 class loading constraint violated c
  • 在 IE6 中调试 JavaScript [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在寻找一个可以调试 JavaScript 的工具withinIE6 我的意思是我希望调试器在浏览器中运行 a l 萤火虫 到目前为止我已经尝试过
  • Dojo AMD:无法在 require 中调用函数

    我确实是 dojo 的新手 但当我开始使用 dojo 版本 1 7 2 开发新应用程序时 我也想使用新的 AMD 函数语法 不幸的是我似乎不明白 最让我烦恼的是我不能简单地调用 require 块内的任何函数 例如 我有一个页面 打开时会创