0

我正在编写我的第一个 Windows 8 应用程序,但我已经被卡住了。

我想要做的是显示一个 html/winjs 元素,这取决于在列表视图中单击了哪个索引。我编写的当前代码在某种程度上有效。它将显示第一个元素(albumListView),但之后不会显示其他项目。我已经阅读了 WinJS 文档,但我仍然无法弄清楚我做错了什么。

我究竟做错了什么?有没有更简单的方法来做我想要实现的目标?

这是我写的代码:

我的html:

<div id="albumListView" class="hidden" data-win-control="WinJS.UI.ListView" data-win-options="{itemTemplate:select('#albumTemplate'), layout:{type:WinJS.UI.GridLayout}, selectionMode:'none'}"></div>
<div id="songsListView" class="hidden" data-win-control="WinJS.UI.ListView" data-win-options="{itemTemplate:select('#songsTemplate'), layout:{type:WinJS.UI.ListLayout}}"></div>

我的 CSS:

.hidden {
    display:none;
}

我的 JS:

function hidePanelViewItems() { //hide all panel items

    var items = [albumListView, songsListView];

    for (var i = 0; i < items.length; i++) {
        WinJS.Utilities.addClass(items[i], "hidden");
    }

    return true;
}

function showItem(item) { //show a single item in the panel
    hidePanelViewItems();
    WinJS.Utilities.toggleClass(item, "hidden");

    return true;
}

args.setPromise(WinJS.UI.processAll().done(function () {
    //hide all panel listviews
    hidePanelViewItems();
    //show the album view as a default
    showItem(albumListView);

    //deal with menu item clicks
    menuListView.addEventListener("iteminvoked", function (eventInfo) {
        switch (eventInfo.detail.itemIndex)
        {
            case 0:
                showItem(albumListView);
                break;
            case 1:
                showItem(songsListView);
                break;
        }
    });
}))

提前感谢您的任何回复:)

4

2 回答 2

2

我遇到了类似的事情。如果将列表视图的样式设置为 display:none,则需要调用 forceLayout() 使其再次可见。http://msdn.microsoft.com/en-us/library/windows/apps/hh758352.aspx

于 2013-05-11T04:19:06.023 回答
0

解决了!经过数小时的修改这段代码,我现在发现它一直都很好!问题是数据实际上并没有绑定到我的列表视图,因为它们被隐藏了!

于 2013-01-03T19:24:04.303 回答