diff --git a/src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js b/src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js index cb4aa29f8..bba605576 100644 --- a/src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js +++ b/src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js @@ -22,113 +22,87 @@ BI.SearchTextValueCombo = BI.inherit(BI.Widget, { o.items = BI.isFunction(o.items) ? this.__watch(o.items, function (context, newValue) { self.populate(newValue); }) : o.items; + return { - type: "bi.absolute", - items: [{ + type: "bi.combo", + cls: (o.simple ? "bi-border-bottom" : "bi-border") + " bi-focus-shadow", + container: o.container, + adjustLength: 2, + toggle: false, + ref: function () { + self.combo = this; + }, + el: { + type: "bi.search_text_value_trigger", + cls: "search-text-value-trigger", + watermark: o.watermark, + ref: function () { + self.trigger = this; + }, + items: o.items, + height: o.height - (o.simple ? 1 : 2), + text: o.text, + defaultText: o.defaultText, + value: o.value, + tipType: o.tipType, + warningTitle: o.warningTitle, + title: o.title, + allowClear: o.allowClear, + listeners: [{ + eventName: BI.SearchTextValueTrigger.EVENT_CHANGE, + action: function () { + self.setValue(this.getValue()); + self.combo.hideView(); + self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE); + } + }, { + eventName: BI.SearchTextValueTrigger.EVENT_CLEAR, + action: function () { + self.setValue(); + self.combo.hideView(); + self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE); + } + }, { + eventName: BI.SearchTextValueTrigger.EVENT_CLEAR, + action: function () { + self._clear(); + } + }] + }, + popup: { el: { - type: "bi.combo", - cls: (o.simple ? "bi-border-bottom" : "bi-border") + " bi-focus-shadow", - container: o.container, - adjustLength: 2, - toggle: false, + type: "bi.text_value_combo_popup", + chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, + value: o.value, + items: o.items, ref: function () { - self.combo = this; - }, - el: { - type: "bi.search_text_value_trigger", - cls: "search-text-value-trigger", - watermark: o.watermark, - ref: function () { - self.trigger = this; - }, - items: o.items, - height: o.height - (o.simple ? 1 : 2), - text: o.text, - defaultText: o.defaultText, - value: o.value, - tipType: o.tipType, - warningTitle: o.warningTitle, - title: o.title, - allowClear: o.allowClear, - listeners: [{ - eventName: BI.SearchTextValueTrigger.EVENT_CHANGE, - action: function () { - self.setValue(this.getValue()); - self.combo.hideView(); - self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE); - } - }, { - eventName: BI.SearchTextValueTrigger.EVENT_CLEAR, - action: function () { - self.setValue(); - self.combo.hideView(); - self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE); - } - }] - }, - popup: { - el: { - type: "bi.text_value_combo_popup", - chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, - value: o.value, - items: o.items, - ref: function () { - self.popup = this; - self.trigger.getSearcher().setAdapter(self.popup); - }, - listeners: [{ - eventName: BI.TextValueComboPopup.EVENT_CHANGE, - action: function () { - self.setValue(this.getValue()); - self.combo.hideView(); - self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE); - } - }] - }, - value: o.value, - maxHeight: 252, - minHeight: 25 + self.popup = this; + self.trigger.getSearcher().setAdapter(self.popup); }, listeners: [{ - eventName: BI.Combo.EVENT_AFTER_HIDEVIEW, + eventName: BI.TextValueComboPopup.EVENT_CHANGE, action: function () { - self.trigger.stopEditing(); - } - }, { - eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW, - action: function () { - self.fireEvent(BI.SearchTextValueCombo.EVENT_BEFORE_POPUPVIEW); - } - }], - hideChecker: function (e) { - return self.triggerBtn.element.find(e.target).length === 0; - } - }, - left: 0, - right: 0, - bottom: 0, - top: 0 - }, { - el: { - type: "bi.trigger_icon_button", - cls: "trigger-icon-button", - ref: function () { - self.triggerBtn = this; - }, - width: o.height, - height: o.height, - handler: function () { - if (self.combo.isViewVisible()) { + self.setValue(this.getValue()); self.combo.hideView(); - } else { - self.combo.showView(); + self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE); } - } + }] }, - right: 0, - bottom: 0, - top: 0 - }] + value: o.value, + maxHeight: 252, + minHeight: 25 + }, + listeners: [{ + eventName: BI.Combo.EVENT_AFTER_HIDEVIEW, + action: function () { + self.trigger.stopEditing(); + } + }, { + eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW, + action: function () { + self.fireEvent(BI.SearchTextValueCombo.EVENT_BEFORE_POPUPVIEW); + } + }], }; }, @@ -139,6 +113,11 @@ BI.SearchTextValueCombo = BI.inherit(BI.Widget, { } }, + _clear: function () { + this.trigger.attr("text", ""); + this.setValue([]); + }, + _checkError: function (v) { if (BI.isNull(v) || BI.isEmptyArray(v) || BI.isEmptyString(v)) { this.trigger.options.tipType = "success"; diff --git a/src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js b/src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js index 5673d3f47..2dd67933a 100644 --- a/src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js +++ b/src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js @@ -5,16 +5,32 @@ BI.SearchTextValueTrigger = BI.inherit(BI.Trigger, { props: function () { return { - extraCls: "bi-search-text-value-trigger", + baseCls: "bi-search-text-value-trigger", height: 24, - watermark: BI.i18nText("BI-Basic_Search") + watermark: BI.i18nText("BI-Basic_Search"), + allowClear: false, }; }, render: function () { var self = this, o = this.options; + + var triggerButton = { + type: "bi.trigger_icon_button", + cls: "trigger-icon-button", + ref: function () { + self.triggerBtn = this; + }, + width: o.height, + height: o.height, + width: 24, + }; + + var stateText = this._digest(o.value, o.items); + return { - type: "bi.htape", + type: "bi.horizontal_fill", + columnSize: ["fill", 24], items: [ { el: { @@ -30,7 +46,7 @@ BI.SearchTextValueTrigger = BI.inherit(BI.Trigger, { }, watermark: o.watermark, defaultText: o.defaultText, - text: this._digest(o.value, o.items), + text: stateText, value: o.value, height: o.height, tipText: "" @@ -55,10 +71,30 @@ BI.SearchTextValueTrigger = BI.inherit(BI.Trigger, { }] } }, { - el: { - type: "bi.layout", - width: 24 - }, + el: o.allowClear ? { + type: "bi.vertical_adapt", + horizontalAlign: "left", + scrollable: false, + items: [ + { + el: { + type: "bi.icon_button", + ref: function (_ref) { + self.clearBtn = _ref; + }, + cls: "close-h-font " + (o.allowClear ? "clear-button" : ""), + stopPropagation: true, + invisible: !BI.isNotEmptyString(stateText), + width: o.height, + handler: function () { + self.fireEvent(BI.SearchTextValueTrigger.EVENT_CLEAR); + }, + }, + }, { + el: triggerButton, + } + ] + } : triggerButton, width: 24 } ] @@ -100,7 +136,9 @@ BI.SearchTextValueTrigger = BI.inherit(BI.Trigger, { }, setValue: function (vals) { - this._setState(this._digest(vals, this.options.items)); + var stateText = this._digest(vals, this.options.items); + this._setState(stateText); + this.options.allowClear && this.clearBtn.setVisible(BI.isNotEmptyString(stateText)); }, getValue: function () { diff --git a/src/case/trigger/trigger.text.js b/src/case/trigger/trigger.text.js index b9a51cc6f..52da67200 100644 --- a/src/case/trigger/trigger.text.js +++ b/src/case/trigger/trigger.text.js @@ -72,6 +72,8 @@ BI.TextTrigger = BI.inherit(BI.Trigger, { }, cls: "close-h-font " + (o.allowClear ? "clear-button" : ""), stopPropagation: true, + width: o.triggerWidth || o.height, + invisible: !BI.isNotEmptyString(o.text), handler: function () { self.fireEvent(BI.TextTrigger.EVENT_CLEAR); },