Show:
                        import Ember from "ember";
                        import EmberObjectUtils from "ember-object-utils";
                        import MultipleValue from "./MultipleValue";
                        import copyValuesToObject from "./copyValuesToObject";
                        import copyValuesToRecord from "./copyValuesToRecord";
                        
                        /**
                         * Mixin which enables views to have multiple values.
                         *
                         * @class EmberForm.MultipleValueMixin
                         * @module ember-form
                         * @submodule ember-form-items
                         */
                        export default Ember.Mixin.create({
                          init : function() {
                            this._super();
                            var values = this.get("values");
                            this.set("values", Ember.isEmpty(values) ? Ember.A() : values);
                            if(this.get("value")) {
                              this.valArrayDidChange();
                            }
                            else {
                              this.valuesArrayDidChange();
                            }
                          },
                        
                          values : EmberObjectUtils.hasMany(MultipleValue),
                        
                          valuesCount : Ember.computed("values.@each", {
                            get : function() {
                              return this.get("values.length") || 0;
                            },
                          }),
                        
                          createNewRecordAndAddToValue : function(data) {
                            this.get("value").pushObject(this.get("columnData.form.arrayType").create(data));
                          },
                        
                          valuesArrayDidChange : Ember.observer("values.@each.value", "view.values.@each.value", function() {
                            if(!this.get("values") || this.get("lock")) {
                              return;
                            }
                            var value = this.get("value"), values = this.get("values"),
                                valLength = value && value.get("length"), valuesLength = values.get("length"),
                                columnData = this.get("columnData"), record = this.get("record");
                            if(value) {
                              this.set("lock", true);
                              values.forEach(function(val, idx) {
                                var valObj = value.objectAt(idx);
                                if(valObj) {
                                  valObj.set(columnData.get("form.arrayCol"), val.get("value"));
                                  copyValuesToRecord(valObj, columnData, record, val);
                                }
                                else {
                                  var data = { /*id : columnData.get("name")+"__"+csvid++*/ };
                                  data[columnData.get("form.arrayCol")] = val.get("value");
                                  copyValuesToObject(data, columnData, record, val);
                                  this.createNewRecordAndAddToValue(data);
                                }
                              }, this);
                              if(valLength > valuesLength) {
                                for(var i = valuesLength; i < valLength; i++) {
                                  value.popObject();
                                }
                              }
                              this.set("lock", false);
                            }
                          }),
                        
                          valArrayDidChange : Ember.observer("value.@each", "view.value.@each", function() {
                            if(this.get("lock")) {
                              return;
                            }
                            var value = this.get("value");
                            if(value) {
                              var values;
                              values = this.valuesMultiCreateHook(value);
                              this.set("lock", true);
                              this.set("values", values);
                              this.set("lock", false);
                            }
                          }),
                        
                          valuesMultiCreateHook : function(value) {
                            if(value.map) {
                              return Ember.A(value.map(function(e) {
                                return this.valuesElementCreateHook(e);
                              }, this));
                            }
                            return Ember.A();
                          },
                        
                          valuesElementCreateHook : function(element) {
                            var columnData = this.get("columnData");
                            return {val : element.get(columnData.get("form.arrayCol")), columnData : columnData};
                          },
                        
                          lock : false,
                        
                          valuesWereInvalid : Ember.observer("values.@each.isInvalid", "view.values.@each.isInvalid", "disabled", "view.disabled", function() {
                            //for now arrayCol is present for all multi value cols
                            //change this check if there are exceptions
                            if(!this.get("columnData.form.arrayCol")) {
                              return;
                            }
                            var values = this.get("values"),
                                isInvalid = !values || values.get("length") === 0 || values.anyBy("isInvalid", true),
                                record = this.get("record"), columnData = this.get("columnData");
                            if(!record) {
                              return;
                            }
                            if(this.get("disabled")) {
                              delete record._validation[columnData.get("name")];
                            }
                            else {
                              this.set("invalid", isInvalid);
                              record._validation = record._validation || {};
                              if(isInvalid) {
                                record._validation[columnData.get("name")] = 1;
                              }
                              else {
                                delete record._validation[columnData.get("name")];
                              }
                            }
                            this.validateValue();
                          }),
                        });