/** * 卡片布局,可以做到当前只显示一个组件,其他的都隐藏 * @class BI.CardLayout * @extends BI.Layout * * @cfg {JSON} options 配置属性 * @cfg {String} options.defaultShowName 默认展示的子组件名 */ BI.CardLayout = BI.inherit(BI.Layout, { props: function () { return BI.extend(BI.CardLayout.superclass.props.apply(this, arguments), { baseCls: "bi-card-layout", items: [] }); }, created: function () { BI.CardLayout.superclass.created.apply(this, arguments); this.populate(this.options.items); }, _getCardName: function (cardName) { return this.getName() + cardName; }, resize: function () { // console.log("default布局不需要resize"); }, stroke: function (items) { var self = this; this.showIndex = void 0; BI.each(items, function (i, item) { if (!!item) { if (!self.hasWidget(self._getCardName(item.cardName))) { var w = BI.createWidget(item); self.addWidget(self._getCardName(item.cardName), w); } else { var w = self.getWidgetByName(self._getCardName(item.cardName)); } w.element.css({"position": "absolute", "top": "0", "right": "0", "bottom": "0", "left": "0"}); w.setVisible(false); } }); }, populate: function (items) { BI.CardLayout.superclass.populate.apply(this, arguments); this._mount(); this.options.defaultShowName && this.showCardByName(this.options.defaultShowName); }, isCardExisted: function (cardName) { return this.hasWidget(this._getCardName(cardName)) && $(this.getWidgetByName(this._getCardName(cardName)).element).length !== 0; }, getCardByName: function (cardName) { if (!this.hasWidget(this._getCardName(cardName))) { throw new Error("cardName不存在,无法获取"); } return this._children[this._getCardName(cardName)]; }, deleteCardByName: function (cardName) { if (!this.hasWidget(this._getCardName(cardName))) { throw new Error("cardName不存在,无法删除"); } this.getWidgetByName(this._getCardName(cardName)).destroy(); var index = BI.findKey(this.options.items, function (i, item) { return item.cardName == cardName; }); this.options.items.splice(index, 1); delete this._children[this._getCardName(cardName)]; }, addCardByName: function (cardName, cardItem) { if (this.hasWidget(this._getCardName(cardName))) { throw new Error("cardName已经存在了"); } this.options.items.push({el: cardItem, cardName: cardName}); var widget = BI.createWidget(cardItem); widget.element.css({"position": "relative", "top": "0", "left": "0", "width": "100%", "height": "100%"}) .appendTo(this.element); widget.invisible(); this.addWidget(this._getCardName(cardName), widget); return widget; }, showCardByName: function (name, action, callback) { var self = this; //name不存在的时候全部隐藏 var exist = this.hasWidget(this._getCardName(name)); if (this.showIndex != null) { this.lastShowIndex = this.showIndex; } this.showIndex = this._getCardName(name); var flag = false; BI.each(this._children, function (i, el) { if (self._getCardName(name) != i) { //动画效果只有在全部都隐藏的时候才有意义,且只要执行一次动画操作就够了 !flag && !exist && (BI.Action && action instanceof BI.Action) ? (action.actionBack(el), flag = true) : el.element.hide(); } else { (BI.Action && action instanceof BI.Action) ? action.actionPerformed(void 0, el, callback) : el.element.show(0, function () { el._mount(); callback && callback(); }); } }); }, showLastCard: function () { var self = this; this.showIndex = this.lastShowIndex; BI.each(this._children, function (i, el) { if (self.showIndex != i) { el.element.hide(); } else { el.element.show(); } }) }, setDefaultShowName: function (name) { this.options.defaultShowName = name; return this; }, getDefaultShowName: function () { return this.options.defaultShowName; }, getAllCardNames: function () { return BI.map(this.options.items, function (i, item) { return item.cardName; }) }, getShowingCard: function () { if (!BI.isKey(this.showIndex)) { return void 0; } return this.getWidgetByName(this.showIndex); }, deleteAllCard: function () { var self = this; BI.each(this.getAllCardNames(), function (i, name) { self.deleteCardByName(name); }) }, hideAllCard: function () { BI.each(this._children, function (i, el) { el.invisible(); }); }, isAllCardHide: function () { var flag = true; BI.each(this._children, function (i, el) { if (el.isVisible()) { flag = true; return false; } }); return flag; } }); $.shortcut('bi.card', BI.CardLayout);