Javascript Dojo.query和dijits

Javascript Dojo.query和dijits,javascript,dojo,Javascript,Dojo,我有一些js代码,它使用HTML5样式的数据属性自动绑定一个自定义js对象和一组输入控件 例如。 html代码 等 js代码 var nodeList = dojo.query("input[data-field]"); nodeList.forEach(function(node) { try { node.value = dataObject.getProp(node.attributes["data-field"].value); } catch (error)

我有一些js代码,它使用HTML5样式的数据属性自动绑定一个自定义js对象和一组输入控件

例如。 html代码

js代码

var nodeList = dojo.query("input[data-field]");
nodeList.forEach(function(node) {
    try {
      node.value = dataObject.getProp(node.attributes["data-field"].value);
    } catch (error){
      console.log(error);
    }
});
dataObject.getProp方法返回给定名称的值

情况就是这样,一切正常。现在,我已经将输入控件转换为dijit.form.TextBoxs,代码不再工作

问题是:
1.解析html时,HTML5数据属性已被删除(有一种解决方法,包括将每个控件包装在一个span标记中并添加HTML5数据属性,这有点不方便,但会在过渡期间完成)。

2.如何像上面那样组合dojo.query语法并返回一个dijit数组,以便迭代并设置文本框的值。

声明性dojo dijit类(HTML)上未映射到dijit类属性之一的属性将从生成的DOM节点中删除

这种行为是因为不能保证简单的“div”不会映射到某些dijit的整个节点树。带有声明的DOM节点可能不是最终成为dijit的domNode属性的DOM节点

您要做的是,改用CSS类样式。这是非常常见的,因为HTML中使用“class”属性来区分相似的标记。通常,当您尝试对类似dijit的子集进行操作时,您也会希望它们具有不同的显示样式

例如:

<div dojoType="dijit.form.TextBox" class="firstname" />

dojo.query(".firstname").forEach(...);

查询(“.firstname”).forEach(…);
我通过以下方式解决了这个问题:

dojo.query( '.any_given_class' ).forEach(function(widget_node){ 
    widget = dijit.byNode(widget_node); //this will give the widget object, using the DOM node
});
这样,通过使用节点引用,我可以获得包含所有dijit方法和属性的小部件。 这可能是一个解决方案,因为通过这样做,您可以获得小部件:

widget = dijit.byNode(dojo.byId('any_id'));

在Dojo1.7.3中,dijit.byNode()似乎不能正常工作

我得到的小部件如下所示:

var widget = registry.getEnclosingWidget(widget_node);

斯蒂芬。这有助于选择节点(使用class属性),但如何更改dijit的值。节点列表似乎不包含纯dijit,而是dojo解析器围绕原始html标记构建的DOM节点。例如,node.attr(“value”、“newvalue”)不起作用。dijit.findwidget或dijit.registry.forEach(…)