dojo onClick()事件和javascript范围

时间:2016-10-23 07:45:21

标签: javascript html events onclick dojo

我需要对javascript中的函数范围以及onClick()的{​​{1}}事件做一些澄清。

正如文件所示:

https://dojotoolkit.org/reference-guide/1.10/dojox/mobile/Button.html

我执行以下操作,使用函数调用而不是将其写入内联:

HTML

dojox/mobile/Button

JS

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()要求的功能,我无法使用其工具。

什么是正确的方法?

更新

我不知道这是否是最好的方式,但这样做有效:

HTML

dojo

JS

button#myBtn.mblSimpleDialogButton(data-dojo-type="dojox/mobile/Button" data-dojo-props="label: 'Ok'" style="width:60%;")

1 个答案:

答案 0 :(得分:0)

即使您可以通过其他方式使用data-dojo-propsdefine([ "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