我需要对javascript中的函数范围以及onClick()
的{{1}}事件做一些澄清。
正如文件所示:
https://dojotoolkit.org/reference-guide/1.10/dojox/mobile/Button.html
我执行以下操作,使用函数调用而不是将其写入内联:
dojox/mobile/Button
button.mblSimpleDialogButton(data-dojo-type="dojox/mobile/Button" data-dojo-props="label: 'Ok', onClick:foo()" style="width:60%;")
它不会起作用,因为(据我所知)script(type="text/javascript").
require([
"dojo/on",
"dijit/registry",
"dojo/domReady!"
], function (on, registry) {
function foo() {
// do something
}
});
是在另一个函数中定义的,因此它的范围仅限于该函数。
但如果我将foo()
放在全球一级,请说:
foo()
我收到类型错误,因为script(type="text/javascript").
require([
"dojo/on",
"dijit/registry",
"dojo/domReady!"
], function (on, registry) {
});
function foo() {
// do something
}
找不到处理程序:
TypeError:this.onClick不是函数
最后,使用标准html导致处理程序工作:
dojo
但由于button.mblSimpleDialogButton(data-dojo-type="dojox/mobile/Button" data-dojo-props="label: 'Procedi'" onClick="foo()" style="width:60%;")
超出了foo()
要求的功能,我无法使用其工具。
什么是正确的方法?
我不知道这是否是最好的方式,但这样做有效:
dojo
button#myBtn.mblSimpleDialogButton(data-dojo-type="dojox/mobile/Button" data-dojo-props="label: 'Ok'" style="width:60%;")
答案 0 :(得分:0)
即使您可以通过其他方式使用data-dojo-props
,define([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dijit/_WidgetsInTemplateMixin"
], function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin) {
return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin], {
templateString: '<button data-dojo-type="dojox/mobile/Button"' +
'data-dojo-props="onClick:myOnClick">My Button</button>',
myOnClick: function(/*Event*/ evt) {
console.log('Hello click');
}
});
});
仍将在Widgets with templates中使用。
最常见的例子:
this
以这种方式使用,widget
将是您的dojo
,您可以使用您需要的任何function/property
模块或任何dojo/on
的小部件。
另一种方法是在问题中使用模块dojo/_base/lang
,但请注意,函数的范围将会更改,因此您需要使用template<class MyTensor>
void myRankAgnosticFunc(MyTensor& tensor) {
...
tensor.resize(...);
...
或javascript的原生bind。请阅读此other answer以获取有关它的更多信息。
我还建议您阅读Understanding _WidgetBase