dojo templatedmixin内部小部件事件行为
观察: 在我制作的自定义小部件的模板中,有一行:dojo templatedmixin内部小部件事件行为,dojo,Dojo,观察: 在我制作的自定义小部件的模板中,有一行: <input type="text" data-dojo-props="placeHolder:'Search...'" data-dojo-attach-event="onchange: search"/> 这可以很好地工作,因为在on change中,我的小部件的搜索功能被调用。但显示器是普通的输入框,而不是dijit的花哨显示器。所以我这样做: <input type="text" data-dojo-type="di
<input type="text" data-dojo-props="placeHolder:'Search...'" data-dojo-attach-event="onchange: search"/>
这可以很好地工作,因为在on change中,我的小部件的搜索功能被调用。但显示器是普通的输入框,而不是dijit的花哨显示器。所以我这样做:
<input type="text" data-dojo-type="dijit.form.TextBox" data-dojo-props="placeHolder:'Search...'" data-dojo-attach-event="onchange: search"/>
现在,显示正常,但更改时不调用搜索。现在我做到了:
<input type="text" data-dojo-type="dijit.form.TextBox" data-dojo-props="placeHolder:'Search...'" data-dojo-attach-event="onchange: random_name"/>
整个页面崩溃,调试器告诉我dojo在作用域中找不到函数random_name
要给出完整的代码,它们是:
编辑:代替onchange,我尝试了onchange、ondijitchange或任何其他事件,如“onclick”、“onclick”、“ondijitclick”等,但无论我在浏览器中做什么,都不会调用search。在dijit中,事件名称是onchange Api:
仔细查看您的代码,我可能会从模板中删除附加事件,并使用将其添加到小部件js文件的“启动”函数中 以“MainViewWidget.js”代码和模板标记为例,下面是我将尝试的修改: 首先,模板更改
<input type="text" data-dojo-type="dijit.form.TextBox" data-dojo-props="placeHolder:'Search...'" data-dojo-attach-point="inputNode"/>
define(["dojo/_base/declare","dojo/dom",
"dijit/_Widget", "dijit/_TemplatedMixin",
"dojo/text!./templates/MainViewWidget.html",
"dojo/on",
"dijit/layout/TabContainer", "dijit/layout/ContentPane","dijit/layout/BorderContainer","dijit/form/TextBox", "dijit/layout/AccordionContainer"],
function(declare, dom, _Widget, _TemplatedMixin, template, on){
return declare("package.MainViewWidget", [_Widget, _TemplatedMixin], {
// widgetsInTemplate: true, /*keep this false, otherwise data-dojo-attach-event attribute is a pain in the ass!*/
templateString: template,
constructor: function(){
},
startup: function(){
on(this.inputNode, "change", function(){//or just have your search function here instead
alert('hi');
});
}
});
});
如果要在“on”处理程序中使用“this”引用小部件,则可能需要对事件处理程序使用dojo
希望这有帮助,我没有任何打字错误