观察:
在我正在制作的自定义小部件模板中,有一行:
<input type="text" data-dojo-props="placeHolder:'Search...'" data-dojo-attach-event="onchange: search"/>
这在改变时工作正常,我的小部件的搜索功能被调用。但是显示器是普通的输入框,而不是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
中找不到函数"scope"
。
要提供整个代码,here它们是:
编辑 :代替onchange,我尝试了onChange
,ondijitchange
或任何其他事件,例如'onclick','onClick ','ondijitclick'等,但搜索永远不会在浏览器中调用。
答案 0 :(得分:0)
在dijit中,事件名称为onChange。
API: http://dojotoolkit.org/api/1.8/dijit/form/TextBox#onChange
答案 1 :(得分:0)
好好看看你的代码,dojo 1.8 input example我可能会从模板中删除attach事件,并使用dojo/on将其添加到widget js文件的'startup'函数中。
所以拿你的'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的lang.hitch作为事件处理程序。
希望有帮助,而且我没有任何错别字。