实际上,我是DOJO开发的新手。我有几个问题要问谁有DOJO开发经验。
我有一些html片段是由dojo ajax调用加载的(主要的html和javascript在index.html url链接被命中时已经加载了),新加载的片段只更新整个index.html中的一个div,但是整个索引。 HTML保持不清楚。
新加载的html片段中有一些DOM元素(例如一些输入字段和按钮)。我需要通过在我的javascript中调用一些dojo函数来访问新加载的html片段中的字段。但我从来没有得到它的作用??
我已经编写了一些dojo脚本函数作为DOM事件监听器,等待新加载的html片段并单击按钮,但我总是得到错误或根本没有响应。
我新加载的html片段为:
<span>Enter your email to sign in</span>
<br><input type="text" placeholder="your@email.com" name="email" id="email" />
<br><input type="password" placeholder="your pass word" name="password" id="password" />
<br>
<input value="Sign in" name="Sign in" id="Sign in" class="submit" data-dojo-type="dijit.form.Button" data-dojo-props="onClick: handleClick" data-dojo-id="dojo Sign in" type="submit" />Or<input value="Sign me up" name="Sign me up" id="Sign me up" class="submit" type="submit" />
和我的dojo脚本:
require(["dijit.form.Button"], function handleClick () {
console.log("some button was clicked.");
}
);
我收到错误消息:
Error: scriptError
_f()dojo.js (line 15)
req.injectUrl/_10b<()dojo.js (line 15)
...}return ret;};};var _364=function(node,root){var pn=node.parentNode;while(pn){if…
我完全输了,对此有什么想法?赞赏。
更新说明:
当我添加更多需要模型时,我的功能如下:
require(["dojo/dom",
"dojo/on",
"dojo/parser",
"dijit/registry",
"dijit/form/Button",
"dojo/domReady!"], function handleClick () {
console.log("some button was clicked.");
}
);
我收到了其他错误信息:
dojo/parser::parse() error
Error: ReferenceError: handleClick is not defined in data-dojo-props='onClick: handleClick'
throw new Error(e.toString()+" in data-dojo-props='"+_49+"'");
它没有按预期工作,假设此函数将加载到浏览器然后等待DOM元素&#34;登录&#34;单击按钮,如果未单击按钮,则不会发生脚本操作,但不幸的是,当脚本刚加载时触发了侦听器功能,不管是否发生了单击按钮事件,它总是打印一个字符串&#34;点击了一些按钮。&#34;在我的firebug控制台中。似乎其他任何事件都可以触发此操作。
对于错误消息,似乎脚本已经从我的MVC控制器找到了调用者定义,它知道调用者在哪里。但他们不知道调用者(被放入一个html片段,它将通过dojo ajax调用加载,这个ajax调用将检查会话以查看天气登录是否需要,如果需要登录, MVC控制器将发送这个片段,否则,这个片段永远不会被加载。)不在这里,甚至不在DOM中。
我知道dojo支持异步函数调用,但调用者缺席怎么样?或者调用者将在以后加载?这是调用者和监听者之间的关系,如果调用者不在,为什么监听器工作?如何让dojo监听器知道,调用者不在这里或不链接到监听器?
抱歉,问题太多了,但是没有按预期工作,所以我迷路了。
答案 0 :(得分:0)
@Shoe的良好链接你必须再次看Modern Dojo以更好地了解Dojo AMD。
require(["dojo/dom", "dojo/domReady!"], function(dom){
dom.byId("helloworld").innerHTML = "Hello New World!";
});
这是现代dojo编码的正确语法。
这里在加载dojo/dom.js
时调用函数。如果dom.js
调用define(),则在dom
的依赖项加载之前不会触发函数,dom
参数将保存dojo/util
的模块值。