0

我是 dojo 的初学者,我正在尝试使用 dojo 代码将输出打印到控制台。但我不知道以下代码有什么问题,如何将输出打印到控制台?

<html>
<head>
<script type = "text/javascript" src = "dojo/dojo.js" data-dojo-config = "async: true, isDebug : true" >
</script>
</head>
<body>
<h1 id = "greeting">Hello</h1>
<script>
define(["dojo/dom"],function(dom) {
var Twitter = declare(null, {username:"defaultusername",
    say :function(msg)
    {
        console.log("Hello "+msg);
    }
});
var myInstance = new Twitter();
myInstance.say("Dojo");
});
</script>
</body>
</html>
4

2 回答 2

3

使用require代替define

<script>
require(["dojo/dom", "dojo/_base/declare"], function(dom, declare) {

    var Twitter = declare(null, {

        username: "defaultusername",

        say :function(msg) {
            console.log("Hello "+msg);
        }
    });

    var myInstance = new Twitter();
    myInstance.say("Dojo");
});
</script>

Console有效,但是您在回调函数中的代码在declare您执行之前不会被执行require

于 2012-05-05T08:47:24.020 回答
1

您不能将define内联脚本代码(即类定义)放在类文件的最上面一行,这意味着定义将文件名映射到其函数的返回值。

这意味着,如果您有

dojo_toolkit /
  dojo/
  dijit/
  dojox/
  libs/
    myWidgets/
       foo.js

并且 foo.js 读取

define(["dijit._Widget"], function(adijit) {
  return declare("libs.myWidgets.foo", [adijit], function() {
    say: function(msg) { console.log(msg); }
  });
});

然后注册一个新模块,称为libs// myWidgetsfoo您应该确保每个定义中返回的声明的声明类与文件层次结构匹配。

话虽这么说,为什么 define 对你不起作用的原因是上面的解释。它是内联的,无需src从中猜测声明的类名称。重写你的代码来定义("aTwitterLogger", [" :

define("aTwitterLogger", ["dojo/_base/declare", "dojo/dom"],function(declare, dom) {
  var Twitter = declare(null, {
      username:"defaultusername",
      say :function(msg)
      {
          console.log("Hello "+msg);
      }
  });
  var myInstance = new Twitter();
  myInstance.say("Dojo");
});
于 2012-05-05T08:31:42.963 回答