2011-11-30 75 views
0

我们正在使用SproutCore v1.6并尝试以编程方式设置所选菜单项。 MenuPane看起来如下所示。SproutCore以编程方式在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') 

但是它从来没有真正触发菜单上的动作。例如它并不实际签署用户。但是,当您手动单击菜单项时,它工作正常。

回答

0

有几件事情

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

相关问题