【问题标题】:Windows 8.1: WinJS: appbar won't open/show by default?Windows 8.1:WinJS:appbar 默认不会打开/显示?
【发布时间】:2014-01-09 12:18:46
【问题描述】:

我正在使用 Windows 8.1 应用程序和数据输入页面,我希望 appBar 默认打开或可见,因为它包含保存数据的选项。

http://msdn.microsoft.com/en-us/library/windows/apps/br229676.aspx

我查看了上面的链接并尝试了以下方式的show方法:

标记:

<div id="appbarCommands" data-win-control="WinJS.UI.AppBar" data-win-options="{sticky: 'true'}">
    <button data-win-control="WinJS.UI.AppBarCommand"
            data-win-options="{id:'cmdSaveCustomer', icon:'save', section:'global'}"
            data-win-res="{winControl: {label:'CRM_contactHistory_appBar_SaveLabel', tooltip:'CRM_contactHisory_appBar_SaveToolTip'}}"></button>
</div>

JS代码:

(function () {
        "use strict";

    WinJS.UI.Pages.define("/pages/CRM/customerDetails/contacts/contactHistory/contactHistory.html", {

        ready: function (element, options) {

            WinJS.UI.processAll().done(function () {

                setAppBarState(document.getElementById("appbarCommands"));

            });
            WinJS.Resources.processAll()            
        }
    });
})();

function setAppBarState(appBar) {

    appBar.winControl.show();

}

无论出于何种原因,appBar 都无法启动。我已经在 appBar 示例代码中对其进行了测试,它在那里工作正常,但在实际解决方案中不起作用。

我想知道是否有人可以阐明这个问题?或者可能知道在页面加载时会阻止显示应用栏的原因?

非常感谢

克里斯

【问题讨论】:

    标签: winjs windows-8.1


    【解决方案1】:

    在 HTML 的 data-win-options 中添加 sticky 属性:

    data-win-options="{ sticky: true }"
    

    然后使用 show() 应该可以正常工作。我在 HTML Appbar 控件示例中对此进行了测试,并且成功了。

    另外,您不需要在 ready 方法中调用 WinJS.UI.processAll —— processAll 会在页面控件加载时自动调用。 (WinJS.Resources.processAll 不一样,只有 UI.processAll。)

    【讨论】:

    • 嗨,克雷格!感谢您的回复。我确实在 data-win-options 中有粘性属性,但它仍然不起作用。我已经修改了我的示例以包含我正在使用的标记,以防万一出现问题。你的书的最终版本已经发布了吗?
    • 我看到你在下面发现了你的问题......我会在那里发表评论。有了这本书,最后一本书将在几个月后出版。 aka.ms/BrockschmidtBook2 上的预览非常接近这些章节的最终材料。
    【解决方案2】:

    通过大量的混乱和价值观的改变,我得到了它的工作。事实证明,所有 appBar 都需要拥有唯一 ID,无论它们位于哪个页面上,否则一个应用栏的属性会从之前页面上的其他页面继承。

    我已经浏览了应用程序并根据页面名称为 ID 命名空间,现在所有 appBar 都可以正常工作!

    多么棒!

    【讨论】:

    • 这很有趣,并指出了为什么我们一般都有全局应用栏,然后根据当前页面显示/隐藏命令。那么,您是说要为每个页面控件 HTML 定义单独的应用栏?我本来希望那些应用栏从 DOM 中删除。我必须检查一下。
    • 所以我尝试了使用带有两个页面的 Nav App 项目模板,每个页面都声明了自己的应用栏,并具有相同的 id。我没有看到任何冲突——第一页的粘性应用栏工作正常,第二页没有粘性,回到第一页我又得到了粘性行为。所以我很好奇你在哪里定义应用栏。正如我所见,您描述的行为表明应用栏没有被页面导航卸载。
    • 是的,我在每个页面上都定义了一个 appbar,老实说,我没有考虑过在全球范围内这样做,但这确实更有意义。再次感谢您的帮助,我期待这本书的完成!
    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多