我正在尝试学习Dojo 1.9,之前曾使用过1.4.x.一直在看一些教程,并尝试了一些dojox / mobile / EdgeToEdgeList的例子。我似乎没有得到它。
使用CDN托管的dojo工具包复制了来自http://dojotoolkit.org/reference-guide/1.9/dojox/mobile/EdgeToEdgeList.html的示例代码,用于声明性(CSS sprite示例)。但是,除了使用dojo移动样式设置了3个项目符号的默认HTML无序列表外,不会显示任何内容。 Chrome和FF 22.0浏览器中的行为相同。我看到没有网络或控制台错误,它似乎没有加载。我怀疑我在某处丢失了某些东西。我需要在某处指定一个onLoad属性吗?
以下是我的HTML示例:
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<title>
MyTitle
</title>
<meta content="" name="description" />
<meta content="" name="keywords" />
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script><![endif]-->
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojox/mobile/deviceTheme.js"></script>
</head>
<body>
<header>
<h1>
My Title
</h1>
<nav>
<ul>
<li>
<a href="/">Home</a>
</li>
</ul>
</nav>
</header>
<!-- load Dojo -->
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script>
require([
"dojox/mobile",
"dojox/mobile/parser"
]);
</script>
<ul data-dojo-type="dojox/mobile/EdgeToEdgeList"
data-dojo-props='iconBase:"all-icons.png"'>
<li data-dojo-type="dojox/mobile/ListItem"
data-dojo-props='iconPos:"0,0,29,29"'>Airplane Mode
<div class="mblItemSwitch" data-dojo-type="dojox/mobile/Switch"></div></li>
<li data-dojo-type="dojox/mobile/ListItem"
data-dojo-props='iconPos:"0,29,29,29",
rightText:"mac",
href:"test_IconContainer.html"'>Wi-Fi</li>
<li data-dojo-type="dojox/mobile/ListItem"
data-dojo-props='iconPos:"0,58,29,29",
rightText:"AcmePhone",
moveTo:"general"'>Carrier</li>
</ul>
</body>
</html>
答案 0 :(得分:0)
当我将parseOnLoad:true添加到data-dojo-config属性以从CDN加载dojo时,EdgeToEdgeList呈现
E.g。
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojo/dojo.js"
data-dojo-config="async: true, parseOnLoad: true"></script>
编辑:进行研究后得到更完整的答案。我的原始问题中的代码不起作用的原因是我使用Declarative样式作为我的EdgeToEdgeList小部件,根据这在Dojo 1.9 documentation使用声明方法时需要解析DOM。但是,尽管parseOnLoad:true在我的情况下有效,但这不是最好的做法。
现在,我们需要做的是调用dojo / parser。通过之前 在Dojo 1.7中你可以安全地使用Dojo配置选项 parseOnLoad:true。但是,现在有一些边缘情况 如果你使用它可能会遇到意想不到的结果,因此它现在 建议在代码中谨慎地调用解析器。所以跑 解析器,你想做这样的事情:
<script type="text/javascript" src="lib/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script type="text/javascript">
require(["dojo/parser", "dojo/ready", "dijit/form/Button"],
function(parser, ready){
ready(function(){
parser.parse();
});
});
</script>
完全按原样使用新方法。这就引出了为什么他们的教程代码没有说明这一点的问题,但无论如何,这是我原来问题的答案。