无法从 Dojo 模块调用另一个 Dojo 模块中的函数

cant call function in another dojo module from dojo module

本文关键字:Dojo 模块 函数 另一个 调用      更新时间:2023-09-26

我在另一个道场模块中从我的 dojo 模块调用方法时遇到问题。 我的调用模块的代码是:

define([
"Templates/MarkTicket",
"DataTypes/MarkTicketForm_Data",
"DBCalls/MarkTicketDB",
...], function (MarkTicket, MarkTicketForm_Data, MarkTicketDB, ...
) {
    return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {

        postCreate: function () {
            //both modules have Test Method
            MarkTicketDB.Test("call from MarkTicketForm");//works great
            MarkTicket.Test("call from MarkTicketForm");//object doesnt support property or method test
        },
...
    });
});

在 MarkTicketDB 中调用测试工作正常,但是当我尝试在 MarkTicket 中调用测试方法时,我收到代码注释中显示的错误。 MarkTicket在调试时只显示一个Createsubclass和exten方法。 我调用这些方法的模块也位于模板目录中 - 这可能是问题所在吗? (我也尝试在定义语句中将 Templates/MarkTicket 定义为 MarkTicket)模板包在我的主页中定义

有什么想法吗?

谢谢

正如我在评论中所说,我认为问题可能是我的调用模块(MarkTicketForm)是一个通过MarkTicket实例化和打开的dijit对话框,这是代码:

马克票:

...
postCreate: function () {
MT = new MarkTicketForm();//instaniate MarkTicketForm inside MarkTicket
}
...
//call a Method in MarkTicket Form to open the dialog
 MT.showForm(TicketInfo);
...

MarkTicketForm(显示对话框的代码):

...
showForm: function (ticketInfo) {
            ID = ticketInfo.ID;
            var DateRcvd = this.formatDate(ticketInfo.DateRcvd);
            this.lblID.innerHTML = ticketInfo.ID;
            this.lblTicket.innerHTML = ticketInfo.Ticket;
            this.lblRcvd.innerHTML = DateRcvd;
            this.lblType.innerHTML = ticketInfo.TicketType;
            this.myDialog.show();
        },
...

就像g00glen00b说的,你应该列出MarkTicket的代码。 但是,既然你说:

MarkTicket在调试时只显示一个Createsubclass和exten方法。

。很明显,MarkTicket 是通过 dojo.declare() 创建的类。

据推测,Test() 是 MarkTicket 实例上的一个方法,而不是 MarkTicket 类本身。 因此,您可以执行以下操作:

var m = new MarkTicket();
m.Test("call from MarkTicketForm");