我遇到了似乎鸡和蛋的问题,并且我认为这是一个合乎逻辑的解决方案.然而,在我看来,其他人肯定遇到过类似的东西,所以我想我会把它漂到那里为群众.
情况是我想使用dojo的addOnLoad函数来排队一些回调,这些回调应该在DOM完成客户端渲染之后执行.所以我正在做的如下:
<html>
<head>
<script type="text/javascript" src="dojo.xd.js"></script>
...
</head>
<body>
...
<script type="text/javascript">
dojo.addOnLoad( ... );
dojo.addOnLoad( ... );
...
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
现在,问题是我似乎在整个Dojo库下载浏览器之前调用了dojo.addOnLoad.这在某种程度上是有道理的,因为内联SCRIPT内容应该在加载整个DOM 之前执行(并且触发正常的主体onload回调).
我的问题是 - 这是我的方法声音,或者更有意义的是注册普通/标准正文onload JavaScript回调来调用一个函数,它执行与每个dojo.addOnLoads在SCRIPT块中所做的相同的工作.当然,这就引出了一个问题,如果您不能保证在使用库之前加载Dojo库,为什么还要使用dojo.addOnLoad呢?
希望这种情况对我以外的人有意义.好像其他人可能遇到过这种情况.
思考?
最诚挚的问候,Adam Rice
有不同的JavaScript框架,如jQuery,Dojo,mooTools,Google Web Toolkit(GWT),YUI等.其中哪一个适用于高性能网站?
我正在使用dijit.form.FilteringSelect来提供一种从<select>中选择值的方法.问题是,当使用dojo时,返回标签而不是s的值.
例如:
如果选择了该选项,Dojo将返回文字"one",而不是该选项的值"1"."2"和"2"也是如此.
<select name="test" dojoType="dijit.form.FilteringSelect">
<option value="1">One</option>
<option value="2">Two</option>
</select>
如果从此元素中删除了dojo,则会按预期返回该值.
我有一个特定的格式XML文档,我将推动.此文档将始终为相同类型,因此非常严格.
我需要解析这个,以便我可以将它转换为JSON(嗯,一个稍微混淆的版本,所以其他人可以使用它与DOJO).
我的问题是,我是否应该使用非常快速的轻量级(不需要SAX等)XML解析器(任何想法?)或编写我自己的,基本上转换为StringBuffer并旋转数组?基本上,我假设所有HTML解析器都将通过字符串(或内存缓冲区)旋转并解析,从而产生输出.
谢谢
编辑
xml将介于3/4行到最大约50行之间(极端情况下).
我有一个dojo(dijit)选择下拉列表调用js函数onChange.我希望这只在用户更改下拉列表中的值时调用onChange函数,但是,当我以编程方式更改js代码下拉列表的值时,它甚至会调用onChange函数.如何在用户更改下拉值时仅调用该函数?当我以编程方式更改值时,它不应该调用该函数.
<select jsId="ddlBoundaryType" id="ddlBoundaryType" name="ddlBoundaryType"
dojoType="dijit.form.Select">
<option value="0">Circle</option>
<option value="1">Polygon</option>
</select>
dojo.addOnLoad(InitBoundaries);
function InitBoundaries() {
dojo.connect(dijit.byId("ddlBoundaryType"), 'onChange', Boundaries_ChangeBoundaryType);
}
Run Code Online (Sandbox Code Playgroud)
谢谢,贾斯汀
我已经阅读了Sencha Touch文档.我觉得它的MVC模型非常有吸引力,但它似乎有很长的启动时间,特别是对于外部JavaScript(例如:map).
虽然我很高兴在网站上使用jQuery,但我对jQuery Mobile的成熟感到担忧.(我还没有测试过)
我不知道Dojo的移动框架.
您喜欢以下哪种替代方案?为什么?
我正在使用谷歌的CDN,并尝试使用他们的加载器加载我自己的AMD模块.我知道我做错了什么但是我被卡住了.有任何想法吗?
<script src="https://ajax.googleapis.com/ajax/libs/dojo/1.7.0/dojo/dojo.js"
type="text/javascript" data-dojo-config="async:true,parseOnLoad:true"></script>
<script type="text/javascript">
require(["dojo/_base/kernel", "dojo/_base/loader", "dojo/parser"], function(dojo){
dojo.registerModulePath("pgGallery", "http://127.0.0.1:8080/js");
});
require(["pgGallery/Message"], function(m){
m.success("foo");
});
</script>
Run Code Online (Sandbox Code Playgroud)
我研究了构建教程,发现了Web构建(仅限1.7.2),并测试了几个示例 - 但是,我找不到构建系统的简单解释.
假设我的应用是一个网页:
<script src="./js/App/other_non_amd_stuff_working_independently.js">
<script src="./js/lib/dojo/dojo.js" data-dojo-config="async: true"></script>
<script src="./js/App/Main.js">
Run Code Online (Sandbox Code Playgroud)
Dojo SDK位于./lib/,Main.js包含Dojo config + app boot:
require({
packages:[{
name:"App",
location:"../../App"
}]
},
[ "dojo/query",
"dijit/layout/BorderContainer",
"App/Foo",
"dojo/domReady!"], function(query, BorderContainer, Foo) { ... });
Run Code Online (Sandbox Code Playgroud)
我现在的问题就像这样简单:如何从我所有的Dojo/AMD东西中创建一个单独的脚本文件?我只是想替换
<script src="./js/lib/dojo/dojo.js" data-dojo-config="async: true"></script>
<script src="./js/App/Main.js">
Run Code Online (Sandbox Code Playgroud)
一个人
<script src="./js/Main.minified.js">
Run Code Online (Sandbox Code Playgroud)
让构建系统在这方面工作似乎有点不重要.它试图将./App/中的所有文件转换为AMD模块(这不是我想要的......)或者无法找到App/Main.我尝试构建一个构建配置文件(app.profile.js),但我不明白这一点,只是它增加了(IMO不必要的)复杂性.如何使构建系统只连接我的App/Main.js包含.依赖?
任何有关理解构建系统的更好教程的提示也值得赞赏.
dojo标记中的id和data-dojo-id之间的区别是什么:
<button id="save" data-dojo-type="dijit/form/Button" type="button" data-dojo-attach-event="onClick:save">Save</button>
Run Code Online (Sandbox Code Playgroud)
我尝试引用此按钮来更改它的标签:var myButton = dijit.byId("save"); 这样我就可以更改按钮标签myButton.set("label","Add New");
如果我使用id ="save"它可以工作.如果我只使用data-dojo-id ="save"则不起作用.
我对Dojo很新,所以你可以指点我的解释或教程将不胜感激!
dojo ×10
javascript ×4
amd ×1
dijit.form ×1
dojo-build ×1
dom ×1
forms ×1
frameworks ×1
gwt ×1
html ×1
java ×1
jquery ×1
json ×1
mobile ×1
onload ×1
sencha-touch ×1
xml ×1