2013-10-25 17 views
0

这实际上是我在Stack中的第一个问题(长时间监听器和所有这些)。除非它在全局范围内,否则不能使用dojo/query

我对Javascript一般而言并不陌生,当然对于Dojo来说也是新手。在这个问题上我一直在绞尽脑汁,但看不到我做错了什么。

我试图通过此代码获取查询以返回DOM中的所有<p>标记。一切都很好。

define ([ 
"dojo/dom", 
"dojo/query" 
], function (dom) { 
return { 
    changeParagraphs: function() { 
     var nodeList = dom.query('p'); 
     console.log(nodeList); 
    } 
    } 
}); 

打扰布局,还是习惯了这个。 如果我打电话询问,因为我在这里...

require(["custom/q3", 
     "dojo/domReady!", 
     "dojo/query"], function(myObject){ 
    myObject.changeParagraphs(); 
}) 

我得到一个对象有没有方法查询错误。

如果不是

VAR节点列表= dom.query( 'P')

我打电话......

VAR节点列表= dojo.query(“P ')

一切都很好。为什么?我知道它不好的做法是使用全球(真的是任何语言),但是我做错了什么?我无意使用全球!

我想我最有可能浪费人们在这里的时间,但我一直在头撞着键盘几个小时。这很可能是非常明显的事情!

在此先感谢!

回答

2

错误object has no method query是有关该问题的提示。 dojo/dom模块没有查询方法。相反,你需要公开的dojo/query方法在定义回调函数:

define(["dojo/dom", "dojo/query"], function (dom, query) { 
    return { 
     changeParagraphs: function() { 
      var nodeList = query('p'); 
      console.log(nodeList); 
     } 
    } 
}); 

然后在您需要:

require(["custom/q3", "dojo/domReady!"], function (myObject) { 
    myObject.changeParagraphs(); 
}) 
+0

非常感谢的快速反应。今晚晚些时候我会看这个,所以我会回复你。我相信你的回答很可能是正确的:) 所以当我试图使用它时,它被连接到我的对象,我_应该_直接访问它? – Galatoni

+0

刚刚检查过它,它工作得很好(就像我怀疑它!) 非常感谢。需要退后一步。欢呼再次寻求帮助! – Galatoni

+1

@Galatoni几乎每个Dojo 1.9模块(例如'foo/bar/baz')的设计都是为了在使用时创建单个对象,数组或数字等,所有这些都希望没有任何副作用或全局变量。当模块加载器完成所有这些有效载荷时,它将按照列出模块名称的相同顺序将它们传递给您的函数。所以在BuffaloBuffalo的例子中,如果你真的想,你可以*重写它为'function(foo,bar)'和'bar('p')'。 (这只是不好的风格。) – Darien

相关问题