Отображение и скрытие элементов в приложении Windows 8

Я пишу свое первое приложение для 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;
}

My 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;
        }
    });
}))

Заранее спасибо за любые ответы :)


person Joel Murphy    schedule 03.01.2013    source источник
comment
Пробовали ли вы использовать DOM Inspector, чтобы увидеть, правильно ли CSS применяется ко второму ListView?   -  person louis.luo    schedule 03.01.2013


Ответы (2)


Я столкнулся с чем-то подобным. Если вы установите стиль списка для display:none, вам нужно вызвать forceLayout(), чтобы снова сделать его видимым. http://msdn.microsoft.com/en-us/library/windows/apps/hh758352.aspx

person bmurmistro    schedule 11.05.2013

Решено! После нескольких часов возни с этим кодом я обнаружил, что все это время все было в порядке! Проблема заключалась в том, что данные на самом деле не были привязаны к моим спискам, поскольку они были скрыты!

person Joel Murphy    schedule 03.01.2013
comment
Не забудьте использовать анимацию постепенного появления/исчезновения ;P - person Jacob Morrison; 04.01.2013