Javascript events SproutCore在MenuPane中以编程方式启动项目选择

Javascript events SproutCore在MenuPane中以编程方式启动项目选择,javascript-events,views,sproutcore,Javascript Events,Views,Sproutcore,我们正在使用SproutCore v1.6,并试图通过编程方式设置所选菜单项。MenuPane如下所示 OurPage = SC.Page.design({ myAccountMenu: SC.MenuPane.create({ layout: { width: 200 }, items: [ { title: 'Sign Out', action: 'signOut' } ], itemAction

我们正在使用SproutCore v1.6,并试图通过编程方式设置所选菜单项。MenuPane如下所示

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')
但是,它实际上从未触发菜单上的操作。e、 g.它实际上并没有注销用户。但是,当您手动单击菜单项时,它工作正常。

有几件事

1) 使用页面上的插座获取accountMenu

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)