diff --git a/README.md b/README.md index e5622d1a..e9e87196 100644 --- a/README.md +++ b/README.md @@ -186,6 +186,12 @@ ReactDOM.render( () => document.body Where to render the DOM node of popup menu when the mode is horizontal or vertical + + builtinPlacements + Object of alignConfigs for dom-align + see placements.jsx + Describes how the popup menus should be positioned + diff --git a/src/Menu.jsx b/src/Menu.jsx index 6d3e5e54..d1768810 100644 --- a/src/Menu.jsx +++ b/src/Menu.jsx @@ -27,9 +27,14 @@ const Menu = createReactClass({ level: PropTypes.number, selectable: PropTypes.bool, multiple: PropTypes.bool, + builtinPlacements: PropTypes.object, children: PropTypes.any, }, + childContextTypes: { + builtinPlacements: PropTypes.object, + }, + mixins: [MenuMixin], isRootMenu: true, @@ -65,6 +70,12 @@ const Menu = createReactClass({ }; }, + getChildContext() { + return { + builtinPlacements: this.props.builtinPlacements, + }; + }, + componentWillReceiveProps(nextProps) { const props = {}; if ('selectedKeys' in nextProps) { diff --git a/src/SubMenu.jsx b/src/SubMenu.jsx index f99525c9..8b448577 100644 --- a/src/SubMenu.jsx +++ b/src/SubMenu.jsx @@ -45,6 +45,10 @@ const SubMenu = createReactClass({ onTitleClick: PropTypes.func, }, + contextTypes: { + builtinPlacements: PropTypes.object, + }, + isRootMenu: false, getDefaultProps() { @@ -420,7 +424,7 @@ const SubMenu = createReactClass({ prefixCls={prefixCls} popupClassName={`${prefixCls}-popup ${popupClassName}`} getPopupContainer={getPopupContainer} - builtinPlacements={placements} + builtinPlacements={Object.assign({}, placements, this.context.builtinPlacements)} popupPlacement={popupPlacement} popupVisible={isOpen} popup={children}