我正在创建一个Windows8HTML5应用程序,并实现一个应用程序栏。当我访问appbar.winControl时,它总是空的。例如,如果我写appbar.winControl.show(),就会得到一个异常,声称winControl为空。
我所做的是创建一个固定布局的应用程序。在不做任何其他操作的情况下,我在文档正文中添加了以下标记:
<body>
<div id="appbar" data-win-control="WinJS.UI.AppBar" aria-label="Command Bar">
<button id="btnBoardSizeUp" data-win-control="WinJS.UI.AppBarCommand" data-win-options="{label:'Larger', icon:'zoomout', section:'global', tooltip:'Increase the board size'}" />
<button id="btnBoardSizeDown" data-win-control="WinJS.UI.AppBarCommand" data-win-options="{label:'Smaller', icon:'zoomin', section:'global', tooltip:'Decrease the board size'}" />
<button id="btnAbortGame" data-win-control="WinJS.UI.AppBarCommand" data-win-options="{label:'Abort', icon:'cancel', section:'selection', tooltip:'Abort the current game'}" />
</div>
<script type="text/javascript">
var appbar = document.getElementById("appbar");
var winControl = appbar.winControl;
winControl.show();
</script>
winControl.show()行产生以下错误:
0x800a138f-JavaScript运行时错误:无法获取未定义或空引用的属性“show”
据我所见,我已经在页面上正确地实现了appbar,所以它应该可以工作。知道怎么回事吗?
最佳答案
页控件尚未初始化,在此之前脚本正在执行。
这个代码可以放在两个地方。要么在
// if the app bar is part of default.html, appbar show can be put in default.js
// default.js already have a call to WinJS.UI.processAll under activated event handler
WinJS.UI.processAll().then(function ()
{
appbar.winControl.show();
});
或
// if the appbar is part of mypage.html, need to have code like this in mypage.js
WinJS.UI.Pages.define('/pages/mypage/mypage.html',
{
ready: function onready(element, options)
{
appbar.winControl.show();
}
}