所以,我知道我不仅可以在整个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);
我觉得我在这里误解了一些事情......你觉得怎么样?
...谢谢
答案 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]);
});