在上下文节点中创建Dojo小部件

时间:2012-08-06 19:53:08

标签: dojo

所以,我知道我不仅可以在整个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文档中解释的用法说:

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

我觉得我在这里误解了一些事情......你觉得怎么样?

...谢谢

1 个答案:

答案 0 :(得分:1)

您似乎将dojo NodeList对象作为第二个参数传递给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]这样的事情来获得第一个节点标识为testNode

的节点上的标识idContext
require(['dojo/query','dijit/form/Form'],function(query,Form){
    new Form({
        method: 'post',
        action: 'aaa/bbb'
    }, query('#formId','idContext')[0]);
});