| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 | define([ "require", "backbone", "hbs!tmpl/business_metadata/BusinessMetadataAttributeItemView_tmpl" ], function(require, Backbone, BusinessMetadataAttributeItemViewTmpl) {    "use strict";    return Backbone.Marionette.ItemView.extend({        template: BusinessMetadataAttributeItemViewTmpl,        templateHelpers: function() {            return {                modalID: this.viewId            };        },        regions: {},        ui: {            attributeInput: "[data-id='attributeInput']",            close: "[data-id='close']",            dataTypeSelector: "[data-id='dataTypeSelector']",            searchWeightSelector: "[data-id='searchWeightSelector']",            entityTypeSelector: "[data-id='entityTypeSelector']",            enumTypeSelectorContainer: "[data-id='enumTypeSelectorContainer']",            enumTypeSelector: "[data-id='enumTypeSelector']",            enumValueSelectorContainer: "[data-id='enumValueSelectorContainer']",            enumValueSelector: "[data-id='enumValueSelector']",            multiValueSelect: "[data-id='multiValueSelect']",            multiValueSelectStatus: "[data-id='multiValueSelectStatus']",            stringLengthContainer: "[data-id='stringLengthContainer']",            stringLengthValue: "[data-id='stringLength']",            createNewEnum: "[data-id='createNewEnum']"        },        events: function() {            var events = {};            return events["keyup " + this.ui.attributeInput] = function(e) {                this.model.set({                    name: e.target.value.trim()                });            }, events["change " + this.ui.searchWeightSelector] = function(e) {                this.model.set({                    searchWeight: e.target.value.trim()                });            }, events["change " + this.ui.dataTypeSelector] = function(e) {                var obj = {                    options: this.model.get("options") || {}                };                delete obj.enumValues, delete obj.options.maxStrLength, "enumeration" === e.target.value.trim().toLowerCase() ? (this.ui.enumTypeSelectorContainer.show(),                 this.ui.enumTypeSelector.show(), this.emumTypeSelectDisplay(), this.ui.stringLengthContainer.hide(),                 this.ui.stringLengthValue.hide()) : (obj.typeName = e.target.value.trim(), "string" === e.target.value.trim().toLowerCase() ? (this.ui.stringLengthContainer.show(),                 this.ui.stringLengthValue.show(), this.ui.enumTypeSelectorContainer.hide(), this.ui.enumTypeSelector.hide(),                 this.ui.enumValueSelectorContainer.hide(), obj.options.maxStrLength = this.ui.stringLengthValue.val()) : (this.ui.enumTypeSelectorContainer.hide(),                 this.ui.enumTypeSelector.hide(), this.ui.enumValueSelectorContainer.hide(), this.ui.stringLengthContainer.hide(),                 this.ui.stringLengthValue.hide())), this.model.set(obj), "enumeration" != e.target.value.trim() && this.ui.multiValueSelectStatus.trigger("change");            }, events["change " + this.ui.enumTypeSelector] = function(e) {                this.model.set({                    enumValues: e.target.value.trim()                });            }, events["change " + this.ui.stringLengthContainer] = function(e) {                var options = this.model.get("options") || {};                "string" == this.ui.dataTypeSelector.val() && (options.maxStrLength = e.target.value.trim()),                 this.model.set({                    options: options                });            }, events["change " + this.ui.enumTypeSelector] = function(e) {                var emumValue = this.ui.enumTypeSelector.select2("data")[0] ? this.ui.enumTypeSelector.select2("data")[0].text : this.ui.enumTypeSelector.val();                this.model.set({                    typeName: emumValue                }), this.model.get("multiValueSelect") && this.model.set({                    typeName: "array<" + emumValue + ">"                }), "" == emumValue || null == emumValue ? this.ui.enumValueSelectorContainer.hide() : (this.ui.enumValueSelectorContainer.show(),                 this.showEnumValues(_.escape(emumValue)));            }, events["change " + this.ui.enumValueSelector] = function(e) {                this.model.set({                    enumValues: this.ui.enumValueSelector.val()                });            }, events["change " + this.ui.multiValueSelectStatus] = function(e) {                this.model.set({                    multiValueSelect: e.target.checked                });                var typename = this.model.get("typeName");                typename = e.target.checked ? "array<" + typename + ">" : typename.replace("array<", "").replace(">", ""),                 this.model.set({                    typeName: typename                });            }, events["change " + this.ui.entityTypeSelector] = function(e) {                var options = this.model.get("options") || {};                options.applicableEntityTypes = JSON.stringify(this.ui.entityTypeSelector.val()),                 this.model.set({                    options: options                });            }, events["click " + this.ui.close] = "onCloseButton", events["click " + this.ui.createNewEnum] = "onCreateUpdateEnum",             events;        },        initialize: function(options) {            _.extend(this, _.pick(options, "typeHeaders", "businessMetadataDefCollection", "enumDefCollection", "isAttrEdit", "viewId", "collection")),             this.viewId = options.model ? options.model.cid : this.viewId;        },        onRender: function() {            var that = this, entitytypes = "", searchWeightValue = "5", stringLengthValue = "50", applicableEntityType = "";            if (this.typeHeaders.fullCollection.each(function(model) {                "ENTITY" == model.toJSON().category && (that.ui.entityTypeSelector.append("<option>" + model.get("name") + "</option>"),                 entitytypes += '<option  value="' + model.get("name") + '" data-name="' + model.get("name") + '">' + model.get("name") + "</option>");            }), this.ui.entityTypeSelector.select2({                placeholder: "选择实体类型",                allowClear: !0,                multiple: !0,                selectionAdapter: $.fn.select2.amd.require("TagHideDeleteButtonAdapter")            }), this.ui.entityTypeSelector.html(entitytypes), this.ui.entityTypeSelector.on("select2:open", function(e) {                $(".select2-dropdown--below").addClass("remove-from-list");            }), this.model.get("searchWeight") && (searchWeightValue = this.model.get("searchWeight") === -1 ? 0 : this.model.get("searchWeight")),             this.model.get("options") && (stringLengthValue = this.model.get("options").maxStrLength || "50",             applicableEntityType = this.model.get("options").applicableEntityTypes ? JSON.parse(this.model.get("options").applicableEntityTypes) : null),             this.ui.stringLengthValue.val(stringLengthValue).trigger("change"), this.ui.searchWeightSelector.val(searchWeightValue).trigger("change"),             this.ui.enumValueSelector.attr("disabled", "false"), this.emumTypeSelectDisplay(),             this.ui.enumTypeSelectorContainer.hide(), this.ui.enumTypeSelector.hide(), this.ui.enumValueSelectorContainer.hide(),             this.isAttrEdit) {                var typeName = this.model.get("typeName");                this.ui.close.hide(), this.ui.createNewEnum.hide(), this.ui.attributeInput.val(this.model.get("name")),                 this.ui.attributeInput.attr("disabled", "false"), this.ui.dataTypeSelector.attr("disabled", "false"),                 this.ui.dataTypeSelector.attr("disabled", "false"), this.ui.multiValueSelect.hide(),                 this.ui.dataTypeSelector.val(typeName), "string" == typeName ? (this.ui.stringLengthContainer.show(),                 this.ui.stringLengthValue.show()) : (this.ui.stringLengthContainer.hide(), this.ui.stringLengthValue.hide()),                 applicableEntityType && _.each(applicableEntityType, function(valName) {                    that.ui.entityTypeSelector.find("option").each(function(o) {                        var $el = $(this);                        $el.data("name") === valName && $el.attr("data-allowremove", "false");                    });                }), this.ui.entityTypeSelector.val(applicableEntityType).trigger("change"), "string" != typeName && "boolean" != typeName && "byte" != typeName && "short" != typeName && "int" != typeName && "float" != typeName && "double" != typeName && "long" != typeName && "date" != typeName && (this.ui.enumTypeSelector.attr("disabled", "false"),                 this.ui.dataTypeSelector.val("enumeration").trigger("change"), this.ui.enumTypeSelector.val(typeName).trigger("change")),                 this.model.get("multiValued") && (this.ui.multiValueSelect.show(), $(this.ui.multiValueSelectStatus).prop("checked", !0).trigger("change"),                 this.ui.multiValueSelectStatus.attr("disabled", "false"));            }        },        showEnumValues: function(enumName) {            var enumValues = "", selectedValues = [], selectedEnum = this.enumDefCollection.fullCollection.findWhere({                name: enumName            }), selectedEnumValues = selectedEnum ? selectedEnum.get("elementDefs") : null;            _.each(selectedEnumValues, function(enumVal, index) {                selectedValues.push(enumVal.value), enumValues += "<option>" + _.escape(enumVal.value) + "</option>";            }), this.ui.enumValueSelector.empty(), this.ui.enumValueSelector.append(enumValues),             this.ui.enumValueSelector.val(selectedValues), this.ui.enumValueSelector.select2({                placeholder: "Select Enum value",                allowClear: !1,                tags: !1,                multiple: !0            }), this.model.set({                enumValues: this.ui.enumValueSelector.val()            });        },        emumTypeSelectDisplay: function() {            var enumTypes = "";            this.enumDefCollection.fullCollection.each(function(model, index) {                enumTypes += "<option>" + _.escape(model.get("name")) + "</option>";            }), this.ui.enumTypeSelector.empty(), this.ui.enumTypeSelector.append(enumTypes),             this.ui.enumTypeSelector.val(""), this.ui.enumTypeSelector.select2({                placeholder: "Select Enum name",                tags: !1,                allowClear: !0,                multiple: !1            });        },        onCreateUpdateEnum: function(e) {            var that = this;            require([ "views/business_metadata/EnumCreateUpdateItemView", "modules/Modal" ], function(EnumCreateUpdateItemView, Modal) {                var view = new EnumCreateUpdateItemView({                    onUpdateEnum: function() {                        that.ui.enumValueSelectorContainer.hide(), that.emumTypeSelectDisplay(), that.ui.enumValueSelector.empty();                    },                    closeModal: function() {                        modal.trigger("cancel"), that.enumDefCollection.fetch({                            success: function() {                                that.ui.enumTypeSelector.val(that.model.get("typeName")).trigger("change");                            }                        });                    },                    enumDefCollection: that.enumDefCollection,                    businessMetadataDefCollection: that.businessMetadataDefCollection                }), modal = new Modal({                    title: "创建/修改 枚举",                    content: view,                    cancelText: "取消",                    okCloses: !1,                    okText: "更新",                    allowCancel: !0,                    showFooter: !1                }).open();                modal.on("closeModal", function() {                    modal.trigger("cancel");                });            });        },        onCloseButton: function() {            var tagName = this.$el.find('[data-id="tagName"]').val();            this.collection.models.length > 0 && this.model.destroy(), 0 == this.collection.models.length && "" != tagName && this.$el.parent().next().find("button.ok").removeAttr("disabled");        }    });});
 |