1

观察:

在我正在制作的自定义小部件的模板中,有一行:

<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"/>

整个页面崩溃,调试器告诉我 dojorandom_name"scope".

为了给出整个代码,它们是:

编辑:代替 onchange,我尝试过onChangeondijitchange或任何其他事件,如“onclick”、“onClick”、“ondijitclick”等,但无论我在浏览器中做什么,搜索都不会被调用。

4

2 回答 2

0

在 dijit 中,事件名称是 onChange。

API: http ://dojotoolkit.org/api/1.8/dijit/form/TextBox#onChange

于 2012-12-31T12:54:14.493 回答
0

仔细查看您的代码和dojo 1.8 输入示例,我可能会从模板中删除附加事件,并使用dojo/on将其添加到小部件 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 的lang.hitch作为事件处理程序。

希望有帮助,我没有任何错别字。

于 2013-01-06T01:39:30.393 回答