0

所以,我知道我不仅可以在整个 DOM 中查询节点,还可以在上下文节点中查询节点,如下所示:

var myNode = dojo.query('#formId', 'idContext');

这样,即使在 DOM 中有另一个使用相同 id 的节点,我也可以获得正确的节点。

我正在尝试的是基于上下文化节点创建小部件。代替 :

    new Form({
        method: 'post',
        action: 'aaa/bbb'
    }, 'formId');

我正在努力

    new Form({
        method: 'post',
        action: 'aaa/bbb'
    }, myNode);

但是 Fbug 记录了错误:

TypeError: _13.hasChildNodes is not a function
[Break On This Error]   

while(_13.hasChildNodes()){

所以,看来我在 Form 的第二个参数中设置了一个错误的对象...... dojo docs 中解释的用法说:

Usage:
var foo = new dijit.form.Form(/* Object? */ params, /* **DomNode**|String */ srcNodeRef);

我觉得我在这里误解了一些东西......你觉得呢?

谢谢...

4

1 回答 1

1

您似乎将一个 dojoNodeList对象作为第二个参数传递给 Form 构造函数。dojo.query 方法返回一个NodeList,而不是单个 dom 元素。Widget 构造函数的第二个(可选)参数是单个 dom 节点,而不是节点列表。

以下作品

require(['dojo/dom','dijit/form/Form'],function(dom,Form){
    new Form({
        method: 'post',
        action: 'aaa/bbb'
    }, dom.byId('formId'));
}); 

不言而喻,在一个页面上拥有多个具有相同 ID 的元素是一种不好的做法,但是您绝对需要这样做,您可以做一些事情,例如dojo.query('#testNode','idContext')[0]让第一个节点的 idtestNode根植于具有身份证idContext

require(['dojo/query','dijit/form/Form'],function(query,Form){
    new Form({
        method: 'post',
        action: 'aaa/bbb'
    }, query('#formId','idContext')[0]);
}); 
于 2012-08-06T20:13:22.853 回答