SproutCore 以编程方式触发 MenuPane 中的项目选择

Posted

技术标签:

【中文标题】SproutCore 以编程方式触发 MenuPane 中的项目选择【英文标题】:SproutCore Programmatically fire item selection in MenuPane 【发布时间】:2011-11-30 16:20:49 【问题描述】:

我们正在使用 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')

但是,它从未真正触发菜单上的操作。例如它实际上并没有将用户注销。但是,当您手动单击菜单项时,它可以正常工作。

【问题讨论】:

【参考方案1】:

一些事情

1) 使用页面上的 outlet 获取 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);

【讨论】:

以上是关于SproutCore 以编程方式触发 MenuPane 中的项目选择的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式触发 MATLAB UI 回调

以编程方式触发 iOS 抖动事件

如何以编程方式触发方法“tabBarController:didSelectViewController:”?

当输入的值以编程方式更改时触发更改事件

如何以编程方式触发 UIView 的点击手势识别器

如何以编程方式触发 ngClick