我有一些使用HTML5样式数据属性的js代码自动绑定自定义js对象和一组输入控件
E.g。
HTML代码
<input type="text" data-field="firstname" /
&GT;等
js code
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数组,这样我就可以迭代并设置文本框的值。
答案 0 :(得分:1)
未映射到dijit类属性之一的声明性Dojo dijit类(在HTML中)的属性将从生成的DOM节点中删除。
这种行为是因为无法保证简单的“div”可能无法映射到某些dijit的整个节点树。带声明的DOM节点可能不是最终成为dijit的domNode属性的DOM节点。
您要尝试做什么,而是使用CSS类样式。这很常见,因为在HTML中使用“class”属性来区分类似的标记。通常当你尝试操作类似dijit的子集时,你也会想要不同的显示样式。
示例:
<div dojoType="dijit.form.TextBox" class="firstname" />
dojo.query(".firstname").forEach(...);
答案 1 :(得分:0)
我通过以下方式解决了这个问题:
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'));
答案 2 :(得分:0)
在Dojo 1.7.3中,dijit.byNode()似乎效果不佳。
我得到这样的小部件:
var widget = registry.getEnclosingWidget(widget_node);