Windows 8 Metro Settings弹出窗口似乎不适用于Javascript?

时间:2012-09-29 17:48:03

标签: javascript windows-8 microsoft-metro settings flyout

我最近一直在尝试为Windows 8创建一个metro应用程序并尝试使用设置弹出窗口。

所以我跟着msdn quickstart:http://msdn.microsoft.com/en-us/library/windows/apps/hh780611.aspx

然而,我无法使其发挥作用。

这是我添加设置弹出​​窗口的部分:

function setupSettings() {
    app.onsettings = function (e) {
        e.detail.applicationcommands = { 'serv_changer': { title: 'Change Server', href: 'settings.html' } };
        WinJS.UI.SettingsFlyout.populateSettings(e);
    }
}

当我按下按钮时,只调用一次函数setupSettings(所以我可以确保它只执行一次)

以下是我的问题:按下按钮后,会出现“更改服务器”链接 。但是,当我点击它时,没有任何反应,侧窗也会淡出。

以下是我尝试过的事情,所以我知道这不是其中之一:

  • 这不是文件丢失。我试图放一个不存在的不同文件,抛出异常,程序崩溃了。在这里,它不会崩溃。
  • HTML已正确编码,因为我尝试用Microsoft的示例设置文件之一替换settings.html。

我正在弄清楚为什么它不起作用。

有人可以提供帮助吗(如果需要,我可以提供更多代码)?

谢谢。

3 个答案:

答案 0 :(得分:2)

在您的settings.html页面中,确保data-win-control声明包括设置commandId的名称 - 这似乎在网上示例中缺失。

例如

如果你的js文件将命令声明为:

e.detail.applicationcommands = { 'serv_changer': { title: 'Change Server', href: 'settings.html' } };

...然后确保您的settings.html文件引用'serv_changer':

<div data-win-control="WinJS.UI.SettingsFlyout" data-win-options="{settingsCommandId:'serv_changer', width:'wide'}">

答案 1 :(得分:0)

在我的应用程序上,我在我的href中削减了斜线。所以像这样的东西:'/ setting.html'

同样在您的settings.html页面上,确保您拥有此data-win-control =“WinJS.UI.SettingsFlyout”

答案 2 :(得分:0)

替换你的js功能

function setupSettings() {
    app.onsettings = function (e) {
        e.detail.applicationcommands = { 'serv_changer': { title: 'Change Server', href: 'settings.html' } };
        WinJS.UI.SettingsFlyout.populateSettings(e);
    }
}

用这个:

function setupSettings(e) {
        e.detail.applicationcommands =
        {
            "serv_changer":
            {
                title: "Change Server",
                href: "/settings.html"
            }
        };
        WinJS.UI.SettingsFlyout.populateSettings(e);
    }

并确保在settings.html文件中引用serv_changer

<div data-win-control="WinJS.UI.SettingsFlyout" data-win-options="{settingsCommandId:'serv_changer'}">