Skip to content

Commit

Permalink
Add ENV.EVENTED_FIRE flag to back port Ember.Evented#fire deprecation…
Browse files Browse the repository at this point in the history
… warning. Also implemented Ember.Evented#trigger.

Also replaced usage inside of Ember.State and Ember.View.

Closes emberjs#8.
  • Loading branch information
Erik Bryn and James A. Rosen authored and ebryn committed Jul 29, 2013
1 parent 112a48e commit e3395fc
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 10 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,4 @@ app more and more Ember-1.0-compatible.
* [Accessors](doc/accessors.md)
* [Ember.Object.create](doc/object_create.md)
* [Ember.ViewState](doc/view_state.md)
* [Ember.Evented#fire](doc/evented_fire.md)
10 changes: 10 additions & 0 deletions doc/evented_fire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Ember.Evented#fire

In Ember 1.0, `Ember.Evented#fire` has been deprecated. This fork introduces a flag, `ENV.EVENTED_FIRE`, with two allowed values:

* `null` (the default) -- `Ember.Evented#fire` works per 0.9.8.1
* `"1.0"` -- Calling `Ember.Evented#fire` will trigger a deprecation warning

In either case, `Ember.Evented#trigger` will work as per 1.0.

See [issue #8](https://github.com/zendesk/ember.js/issues/8) for more information.
5 changes: 5 additions & 0 deletions packages/ember-runtime/lib/mixins/evented.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ Ember.Evented = Ember.Mixin.create({
},

fire: function(name) {
Ember.deprecate("Ember.Evented#fire() has been deprecated in favor of trigger() for compatibility with jQuery. It will be removed in 1.0. Please update your code to call trigger() instead.", Ember.ENV.EVENTED_FIRE !== '1.0');
this.trigger.apply(this, arguments);
},

trigger: function(name) {
Ember.sendEvent.apply(null, [this, name].concat(a_slice.call(arguments, 1)));
},

Expand Down
41 changes: 41 additions & 0 deletions packages/ember-runtime/tests/backports/trigger_test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
function matches(msg, substr) {
ok(msg.indexOf(substr) !== -1);
}

var originalFlag, originalWarn, warnings;

module("Backported Ember.Evented#trigger", {
setup: function() {
originalFlag = Ember.ENV.EVENTED_FIRE;
originalWarn = Ember.Logger.warn;
warnings = [];
Ember.Logger.warn = function(msg) {
warnings.push(msg.replace("WARNING: ", ""));
};
},
teardown: function() {
Ember.ENV.EVENTED_FIRE = originalFlag;
Ember.Logger.warn = originalWarn;
}
});

test("trigger works", function() {
var obj = Ember.Object.createWithMixins(Ember.Evented),
fooCalledWith;

obj.on('foo', function() {
fooCalledWith = [].slice.call(arguments);
});

obj.trigger('foo', 'bar', 'baz');

deepEqual(fooCalledWith, ['bar', 'baz']);
});

test("fire warns on 1.0 level", function() {
Ember.ENV.EVENTED_FIRE = '1.0';
var obj = Ember.Object.createWithMixins(Ember.Evented);
obj.fire('foo');
equal(warnings.length, 1);
matches(warnings[0], "Ember.Evented#fire() has been deprecated in favor of trigger() for compatibility with jQuery. It will be removed in 1.0. Please update your code to call trigger() instead.");
});
7 changes: 7 additions & 0 deletions packages/ember-states/lib/state.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ Ember.State = Ember.Object.extend(Ember.Evented, {
Override the default event firing from Ember.Evented to
also call methods with the given name.
*/
trigger: function(name) {
if (this[name]) {
this[name].apply(this, [].slice.call(arguments, 1));
}
this._super.apply(this, arguments);
},

fire: function(name) {
if (this[name]) {
this[name].apply(this, [].slice.call(arguments, 1));
Expand Down
8 changes: 4 additions & 4 deletions packages/ember-states/lib/state_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -527,7 +527,7 @@ Ember.StateManager = Ember.State.extend(
state = this.findStatesByRoute(state, path);
state = state[state.length-1];

state.fire('setupControllers', this, context);
state.trigger('setupControllers', this, context);
}, this);
//getPath(root, path).setupControllers(this, context);
},
Expand Down Expand Up @@ -573,11 +573,11 @@ Ember.StateManager = Ember.State.extend(

exitStates = exitStates.slice(0).reverse();
this.asyncEach(exitStates, function(state, transition) {
state.fire('exit', stateManager, transition);
state.trigger('exit', stateManager, transition);
}, function() {
this.asyncEach(enterStates, function(state, transition) {
if (log) { Ember.Logger.log("STATEMANAGER: Entering " + get(state, 'path')); }
state.fire('enter', stateManager, transition);
state.trigger('enter', stateManager, transition);
}, function() {
var startState = state, enteredState, initialState;

Expand All @@ -592,7 +592,7 @@ Ember.StateManager = Ember.State.extend(
enteredState = startState;

if (log) { Ember.Logger.log("STATEMANAGER: Entering " + get(startState, 'path')); }
startState.fire('enter', stateManager);
startState.trigger('enter', stateManager);

initialState = get(startState, 'initialState');

Expand Down
19 changes: 13 additions & 6 deletions packages/ember-views/lib/views/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -1323,7 +1323,7 @@ Ember.View = Ember.Object.extend(Ember.Evented,
*/
_notifyWillInsertElement: function() {
this.invokeRecursively(function(view) {
view.fire('willInsertElement');
view.trigger('willInsertElement');
});
},

Expand All @@ -1335,7 +1335,7 @@ Ember.View = Ember.Object.extend(Ember.Evented,
*/
_notifyDidInsertElement: function() {
this.invokeRecursively(function(view) {
view.fire('didInsertElement');
view.trigger('didInsertElement');
});
},

Expand All @@ -1347,7 +1347,7 @@ Ember.View = Ember.Object.extend(Ember.Evented,
*/
_notifyWillRerender: function() {
this.invokeRecursively(function(view) {
view.fire('willRerender');
view.trigger('willRerender');
});
},

Expand Down Expand Up @@ -1386,7 +1386,7 @@ Ember.View = Ember.Object.extend(Ember.Evented,
*/
_notifyWillDestroyElement: function() {
this.invokeRecursively(function(view) {
view.fire('willDestroyElement');
view.trigger('willDestroyElement');
});
},

Expand Down Expand Up @@ -1822,7 +1822,7 @@ Ember.View = Ember.Object.extend(Ember.Evented,
}, 'isVisible'),

_notifyBecameVisible: function() {
this.fire('becameVisible');
this.trigger('becameVisible');

this.forEachChildView(function(view) {
var isVisible = get(view, 'isVisible');
Expand All @@ -1834,7 +1834,7 @@ Ember.View = Ember.Object.extend(Ember.Evented,
},

_notifyBecameHidden: function() {
this.fire('becameHidden');
this.trigger('becameHidden');
this.forEachChildView(function(view) {
var isVisible = get(view, 'isVisible');

Expand Down Expand Up @@ -1878,6 +1878,13 @@ Ember.View = Ember.Object.extend(Ember.Evented,
Override the default event firing from Ember.Evented to
also call methods with the given name.
*/
trigger: function(name) {
if (this[name]) {
this[name].apply(this, [].slice.call(arguments, 1));
}
this._super.apply(this, arguments);
},

fire: function(name) {
if (this[name]) {
this[name].apply(this, [].slice.call(arguments, 1));
Expand Down

0 comments on commit e3395fc

Please sign in to comment.