currentClass = [] initSelect = -> $(".select-wrapper input[type='hidden']").each -> initItem $(this) initItem = ($item) -> url = $item.data('relListUrl') isMultiple = $item.data('relMultiple') $item.select2( multiple : isMultiple placeholder : 'Enter search phrase' initSelection : (element, callback) -> ids = element.val().replace(/\s*/g, '').split(',') $.getJSON(url, {search : {id : ids}}).done (data) -> data = if isMultiple then data else data[0] $item.select2('enable', true) callback(data) addTable($item) if isMultiple hideTags() ajax : url : url dataType : 'json' data : (term) -> {q : term} results : (data) -> {results : data} ).unbind('change').bind 'change', (e) -> $select = $(this) $table = $select.siblings('.select2-items-list') addTable($select) if $table.length is 0 addItem(e.added, $table) hideTags() $item.select2('enable', false) if $item.val().length > 0 hideTags = -> $('.select2-search-choice').hide() addTable = ($item) -> $parent = $item.parent() $parent.children('.select2-items-list').remove() $parent.append('') $table = $parent.children('.select2-items-list') $($item.select2('data')).each -> addItem this, $table $table.sortable stop : -> changeSelectValue($table, $item) $table.disableSelection() addItem = (item, $table) -> $table.append( "
  • #{item.text}
  • " ) $("li[data-id='#{item.id}'] [data-remove]").unbind('click').bind 'click', (e) -> e.preventDefault() removeItem($(e.currentTarget).closest('li'), $table) if confirm 'Вы действительно хотите удалить данную модель?' removeItem = ($li, $table) -> $li.remove() changeSelectValue $table, $table.siblings('.select-wrapper') changeSelectValue = ($table, $input) -> itemsList = [] $table.children('li').each -> $li = $(this) itemsList.push({ id : $li.data('id'), text : $li.text() }) $input.select2('data', itemsList) hideTags() getId = (data) -> if data.data._id return data.data._id.$oid else return data.data.id selectOnSubmit = (e, modelClassName, data) -> dataId = getId(data) $select = $(".select-wrapper [data-rel-class='#{modelClassName}']") newData = [] if $select.data('relMultiple') newData.push($select.val()) if $select.val() newData.push(dataId) else newData = dataId $select.select2('destroy') $select.val(newData) initItem($select) selectCurrent = (event, data) -> currentClass.push(data) $ -> $(document) .on('ready page:load init-select', initSelect) .on('form-saved', selectOnSubmit)