Classy Dojo - 内部方法调用
Classy Dojo - Internal method calls
我完全是 dojo 的初学者,我正试图将我的一些界面代码移到 class 中,只是为了将这些方法排除在我的主文件之外。
我的问题 - 我无法将内部 class 函数用作其他函数的一部分。
如图所示,在外部文件中创建接口对象后,我能够成功:
appInterface = new (interface)
appInterface.showGraphWindow()
appInterface.hideGraphWindow()
但是我不知道如何在 toggleGraphWindow 函数中使用这些函数。 (由于上下文?)
如果我尝试调用:
on(registry.byId("graphBtn"),"click", appInterface.toggleGraphWindow);
线上崩溃:
this.showGraphWindow()
或
this.hideGraphWindow()
有:"Undefined is a not a function"
如何编写 toggleGraphWindow 函数的代码?
Iterface.js
define([
"dojo/_base/declare",
"dojo/on",
"dijit/registry"
],
function(
declare,
on,
registry
){
return declare (null, {
hideGraphWindow : function () {
dijit.byId("graphWindowMain").domNode.style.display = 'none';
dijit.byId("applicationWindow").resize();
},
showGraphWindow : function () {
dijit.byId("graphWindowMain").domNode.style.display = 'block';
dijit.byId("applicationWindow").resize();
},
toggleGraphWindow : function (){
if (dijit.byId("graphBtn").checked == true)
{this.showGraphWindow()}
else
{this.hideGraphWindow()}
}
});
});
怎么了
toggleGraphWindow : function (){
if (dijit.byId("graphBtn").checked == true) {
this.showGraphWindow();
}
else {
this.hideGraphWindow();
}
}
?
感谢你们两位,你们确实是对的,Ken,类似的post我已经读了很多遍了,但不知何故不明白其中的答案:
Calling object methods internally in dojo
阅读您 post 的内容后,我以某种方式理解了上面链接的答案,现在明白了我的问题所在!感谢大家。
我通过修改主应用程序中的代码来修复它,如下所示:
var appInterface = new Interface();
on(registry.byId("graphBtn"),"click", appInterface.toggleGraphWindow);
更改为:
var appInterface = new Interface();
var graphToggle = dojo.hitch(appInterface, "toggleGraphWindow");
on(registry.byId("graphBtn"),"click", graphToggle);
我认为错误的原因是运行时的 "this" 对象实际上是 "graphBtn" 而不是 appInterface。
我完全是 dojo 的初学者,我正试图将我的一些界面代码移到 class 中,只是为了将这些方法排除在我的主文件之外。
我的问题 - 我无法将内部 class 函数用作其他函数的一部分。
如图所示,在外部文件中创建接口对象后,我能够成功:
appInterface = new (interface)
appInterface.showGraphWindow()
appInterface.hideGraphWindow()
但是我不知道如何在 toggleGraphWindow 函数中使用这些函数。 (由于上下文?)
如果我尝试调用:
on(registry.byId("graphBtn"),"click", appInterface.toggleGraphWindow);
线上崩溃:
this.showGraphWindow()
或
this.hideGraphWindow()
有:"Undefined is a not a function"
如何编写 toggleGraphWindow 函数的代码?
Iterface.js
define([
"dojo/_base/declare",
"dojo/on",
"dijit/registry"
],
function(
declare,
on,
registry
){
return declare (null, {
hideGraphWindow : function () {
dijit.byId("graphWindowMain").domNode.style.display = 'none';
dijit.byId("applicationWindow").resize();
},
showGraphWindow : function () {
dijit.byId("graphWindowMain").domNode.style.display = 'block';
dijit.byId("applicationWindow").resize();
},
toggleGraphWindow : function (){
if (dijit.byId("graphBtn").checked == true)
{this.showGraphWindow()}
else
{this.hideGraphWindow()}
}
});
});
怎么了
toggleGraphWindow : function (){
if (dijit.byId("graphBtn").checked == true) {
this.showGraphWindow();
}
else {
this.hideGraphWindow();
}
}
?
感谢你们两位,你们确实是对的,Ken,类似的post我已经读了很多遍了,但不知何故不明白其中的答案:
Calling object methods internally in dojo
阅读您 post 的内容后,我以某种方式理解了上面链接的答案,现在明白了我的问题所在!感谢大家。
我通过修改主应用程序中的代码来修复它,如下所示:
var appInterface = new Interface();
on(registry.byId("graphBtn"),"click", appInterface.toggleGraphWindow);
更改为:
var appInterface = new Interface();
var graphToggle = dojo.hitch(appInterface, "toggleGraphWindow");
on(registry.byId("graphBtn"),"click", graphToggle);
我认为错误的原因是运行时的 "this" 对象实际上是 "graphBtn" 而不是 appInterface。