SproutCore Программно запускает выбор элемента в панели меню - PullRequest
0 голосов
/ 30 ноября 2011

Мы используем SproutCore v1.6 и пытаемся программно установить выбранный пункт меню.Панель меню выглядит следующим образом.

OurPage = SC.Page.design({
    myAccountMenu: SC.MenuPane.create({
        layout: { width: 200 },

        items: [
          { title: 'Sign Out', action: 'signOut' }
        ],

        itemActionKey: 'action',
        itemTitleKey: 'title'
    })
});

Затем мы пытаемся установить 'selectedItem' следующим образом.

OurPage.getPath('myAccountMenu').set('selectedItem', OurPage.getPath('myAccountMenu').items[0])

Это правильно устанавливает выбранный элемент, и мы можем запросить следующеечтобы получить предмет:

OurPage.getPath('myAccountMenu').get('selectedItem')

Однако на самом деле он никогда не вызывает действия в меню.Например, он не выписывает пользователя.Однако, когда вы вручную нажимаете на пункт меню, он работает нормально.

1 Ответ

0 голосов
/ 01 декабря 2011

Несколько вещей

1) Используйте розетку на своей странице, чтобы получить аккаунтMenu

OurPage = SC.Page.design({
    menu: SC.outlet('myAccountMenu'),

    myAccountMenu: SC.MenuPane.create({...})
});

таким образом, если путь к myAccountMenu изменится, вам нужно только изменить розетку.

2) Чтобы установить элемент, просто сделайте

var toSelect = OurPage.getPath('menu').items[0];
OurPage.setPath('menu.selectedItem', toSelect);

3) Глядя на код, нет простого способа вызвать действие при программной настройке выбора. Это потому, что предметы, которые вы передаете, превращаются в MenuItemView экземпляры, и те запускают свои действия на mouseUp.

Однако, если вы используете диаграммы состояний (или даже если нет), вы можете просто извлечь действие из элемента и вызвать его

App.statechart.sendEvent(toSelect.action);

...