_setupLocationObservers: function() { var content = get(this, 'content'), locationProperty = get(this, 'locationProperty'), locationsProperty = get(this, 'locationsProperty'); if(!content) { return; } // Add observer on locations property of content if relevant. var contentLocationsProperty = locationsProperty ? 'content.' + locationsProperty : 'content'; if (locationsProperty) { Ember.addBeforeObserver(this, contentLocationsProperty, this, '_contentLocationsWillChange'); Ember.addObserver(this, contentLocationsProperty, this, '_contentLocationsDidChange'); } // Add array observer for new/removed items in content list var arr = locationsProperty ? get(content, locationsProperty) : content; Ember.assert("Content object or locations property must be array-like", !arr || !!arr.addArrayObserver); if(arr) { arr.addArrayObserver(this); } // Add @each chain observer for location property on array. if(locationProperty) { var contentLocationsChainProperty = contentLocationsProperty + '.@each.' + locationProperty; Ember.addBeforeObserver(this, contentLocationsChainProperty, this, '_contentLocationsWillChange'); Ember.addObserver(this, contentLocationsChainProperty, this, '_contentLocationsDidChange'); } },
_teardownLocationObservers: function() { var content = get(this, 'content'), locationProperty = get(this, 'locationProperty'), locationsProperty = get(this, 'locationsProperty'); if(!content) { return; } // Remove observer on locations property of content. var contentLocationsProperty = locationsProperty ? 'content.' + locationsProperty : 'content'; if (locationsProperty) { Ember.addBeforeObserver(this, contentLocationsProperty, this, '_contentLocationsWillChange'); Ember.addObserver(this, contentLocationsProperty, this, '_contentLocationsDidChange'); } // Remove array observer for new/removed items in content list var arr = locationsProperty ? get(content, locationsProperty) : content; if(arr) { arr.removeArrayObserver(this); } // Remove @each chain observer for location property on array. if(locationProperty) { var contentLocationsChainProperty = contentLocationsProperty + '.@each.' + locationProperty; Ember.removeBeforeObserver(this, contentLocationsChainProperty, this, '_contentLocationsWillChange'); Ember.removeObserver(this, contentLocationsChainProperty, this, '_contentLocationsDidChange'); } },
initSortable: Ember.on('didInsertElement', function() { var opts = {}; Ember.EnumerableUtils.forEach(['start', 'stop'], function(callback) { opts[callback] = Ember.run.bind(this, callback); }, this); this.$().sortable(opts); Ember.EnumerableUtils.forEach(this.get('uiOptions'), this._bindSortableOption, this); Ember.addBeforeObserver(this, 'content', this, this._contentWillChangeAfterElementInserted); this.addObserver('content', this, this._contentDidChangeAfterElementInserted); this._contentDidChangeAfterElementInserted(); }),