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

时间:2015-01-07 22:46:48

标签: javascript dojo

我在另一个dojo模块中从我的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中对Test的调用工作得很好,但是当我尝试在MarkTicket中调用Test方法时,我得到了代码注释中显示的错误。我调试时,MarkTicket只显示Createsubclass和extend方法。我调用这些方法的模块也位于Templates目录中 - 这可能是问题吗? (我还尝试将模板/ MarkTicket定义为定义语句中的MarkTicket)模板包在我的主页中定义

有什么想法吗?

由于

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

MarkTicket:

...
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();

        },
...

1 个答案:

答案 0 :(得分:0)

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

  

MarkTicket在我调试时只显示Createsubclass和extend方法。

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

推测Test()是MarkTicket实例上的一种方法,而不是MarkTicket类本身。因此,您可以这样做:

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