dojo onClick()事件和javascript作用域
我需要一些关于javascript中函数作用域的说明,以及dojo onClick()事件和javascript作用域,javascript,html,events,onclick,dojo,Javascript,Html,Events,Onclick,Dojo,我需要一些关于javascript中函数作用域的说明,以及dojox/mobile/Button的onClick()事件 正如文件所示: 我使用函数调用而不是内联编写来执行以下操作: html js 它不会工作,因为(据我所知)foo()是在另一个函数中定义的,因此它的作用域仅限于该函数 但是,如果我把foo()放在全局级别,比如: script(type="text/javascript"). require([ "dojo/on", "dijit/r
dojox/mobile/Button
的onClick()
事件
正如文件所示:
我使用函数调用而不是内联编写来执行以下操作:
html
js
它不会工作,因为(据我所知)foo()
是在另一个函数中定义的,因此它的作用域仅限于该函数
但是,如果我把foo()
放在全局级别,比如:
script(type="text/javascript").
require([
"dojo/on",
"dijit/registry",
"dojo/domReady!"
], function (on, registry) {
});
function foo() {
// do something
}
我得到一个类型错误,因为dojo
找不到处理程序:
TypeError:this.onClick不是函数
最后,使用标准html将引导处理程序工作:
button.mblSimpleDialogButton(data-dojo-type="dojox/mobile/Button" data-dojo-props="label: 'Procedi'" onClick="foo()" style="width:60%;")
但是因为foo()
在dojo
require的函数之外,我不能使用它的工具
正确的方法是什么
更新
我不知道这是否是最好的方法,但这是有效的:
html
js
即使您可以以其他方式使用,
数据dojo道具也将在中使用
最常见的例子是:
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');
}
});
});
定义([
“dojo/_base/declare”,
“dijit/_WidgetBase”,
“dijit/_TemplatedMixin”,
“dijit/_WidgetsInTemplateMixin”
],函数(declare,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin){
返回declare([\u WidgetBase、\u TemplatedMixin、\u WidgetsInTemplateMixin]{
templateString:“我的按钮”,
myOnClick:函数(/*事件*/evt){
log('Hello click');
}
});
});
通过这种方式,此
将成为您的小部件
,您可以使用所需的任何dojo
模块或小部件的任何功能/属性
另一种方法是使用模块dojo/on
,就像您的问题一样,但是请注意,函数的范围将是更改它,因此您需要使用dojo/\u base/lang
或javascript的本机代码对其进行调整。阅读此文章了解更多信息
此外,我建议您阅读即使您可以以其他方式使用,数据dojo道具
也将在中使用
最常见的例子是:
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');
}
});
});
定义([
“dojo/_base/declare”,
“dijit/_WidgetBase”,
“dijit/_TemplatedMixin”,
“dijit/_WidgetsInTemplateMixin”
],函数(declare,_WidgetBase,_TemplatedMixin,_WidgetsInTemplateMixin){
返回declare([\u WidgetBase、\u TemplatedMixin、\u WidgetsInTemplateMixin]{
templateString:“我的按钮”,
myOnClick:函数(/*事件*/evt){
log('Hello click');
}
});
});
通过这种方式,此
将成为您的小部件
,您可以使用所需的任何dojo
模块或小部件的任何功能/属性
另一种方法是使用模块dojo/on
,就像您的问题一样,但是请注意,函数的范围将是更改它,因此您需要使用dojo/\u base/lang
或javascript的本机代码对其进行调整。阅读此文章了解更多信息
另外,据我所知,我建议您阅读,在创建自定义小部件时,您的代码和提供的链接非常有用。我只想在标准小部件上处理onClick
事件。尝试将onClick:myOnClick
添加到数据dojo道具
并按上述方式定义处理程序会导致引用错误:myOnClick not defined
可能我还不了解dojo
基础。据我所知,您的代码和提供的链接在创建自定义小部件时非常有用。我只想在标准小部件上处理onClick
事件。尝试将onClick:myOnClick
添加到datadojoprops
并按上述方式定义处理程序会导致ReferenceError:myOnClick notdefined
可能我还不了解dojo
基础知识。
button#myBtn.mblSimpleDialogButton(data-dojo-type="dojox/mobile/Button" data-dojo-props="label: 'Ok'" style="width:60%;")
var myBtn = dom.byId("myBtn");
on(myBtn, "click", function (e) {
console.log("clicked!");
});
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');
}
});
});