Dojo.query和dijits

时间:2011-05-12 00:45:38

标签: javascript dojo

我有一些使用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数组,这样我就可以迭代并设置文本框的值。

3 个答案:

答案 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);