Sencha Touch - как отобразить актуальный контент в Nested List? - PullRequest
0 голосов
/ 17 февраля 2012

Итак, скажем, в Sencha Touch я создал вложенный список примерно так:

var NestedList = createList(jsonDataObject,'leftNavigation','list','bookmark-icon');
function createList( data , id , cls, iconCls)
{
    var store = new Ext.data.TreeStore({
        model: 'ListItem',
        root: data,
        proxy: {
            type: 'ajax',
            reader: {
            type: 'tree',
            root: 'items'
            }
        }
    });

    var leftNav = new Ext.NestedList({
        //    cardSwitchAnimation: false,
        dock: 'left',
        id: id,
        cls: 'card '+cls,
        useTitleAsBackText: true,
        title: data.text ,
        iconCls: iconCls,
        displayField: 'text',
        width: '350',
        store: store});
}

Через некоторое время содержимое jsonDataObject изменится (либо периодически с помощью вызова setInterval(), либо из-завзаимодействие с пользователем).Мне также может потребоваться отправить совершенно новый jsonDataObject в NestedList магазин.Итак, мои вопросы:

a) Как заставить NestedList обновить и отобразить новый интерфейс с новыми данными?

б) Является ли моя реализация createList() наиболее подходящим способом создания Nestlisted?Или есть лучший способ для моих целей?

1 Ответ

0 голосов
/ 19 февраля 2012

Поскольку никто не ответил на мой вопрос вовремя, я использовал обходной путь.

Я сохранил код как есть в вопросе. Вложенный список используется панелью контейнера. Поэтому я удалил старый вложенный список с панели контейнера, уничтожил его, затем создал новый вложенный список и вставил его обратно на панель контейнера. Как пример:

// my old nestedlist was item 1 of the container, where container is Ext.TabPanel()
// you can re-use this strategy with any component in the container.items.items array
var oldnestedlist = container.items.items[1]; 
container.remove(oldnestedlist);
oldnestedlist.destroy();

// create the new nestedlist
var NestedList = createList(jsonDataObject,'leftNavigation','list','bookmark-icon');
container.insert(1,NestedList);
// After you insert the NestedList, the screen hasn't been redrawn yet,
// so i force the user to go back to screen if container.items.items[0] via
// setActiveItem(0).  You can choose the screen in any other
// container.items.items array
container.setActiveItem(0);

// Next time someone presses the tab for containers.items.items[1], the screen will automatically redraw
...