I tweeted yesterday that I was having trouble with EmberJS and ReactiveJS integration.
I’m hip-deep in an emberjs app and I can’t get my canvas to pump events through rxjs…
— Brian J Ball (@Myotherpants) June 3, 2014
Well, I figured it out! With some help from the fine ReactiveX folks.
The long story short is RxJs is smart about Ember, and there are consequences.
- Use the Ember.View, not the HTML Dom element.
- Use the Ember event names, not the DOM event names.
Yeah, it boiled down the the difference between mousedown and mouseDown. Did you catch the capitalization of the D? I never even thought to look…
So, what’s it look like in the end?
App.CanvasView = Ember.View.extend({
tagName: 'canvas',
didInsertElement: function(){
this.subscription =
Rx.Observable.fromEvent(this, 'mouseDown')
.subscribe(function(e){
console.log("x="+e.offsetX + " y="+e.offsetY);
});
},
willDestroyElement: function(){
this.subscription.dispose();
}
});
And now to start the magic of using RxJs.
update
I still think there is one thing left. I’ll try and test it out and add a Pr in a bit, but it seems to be important for my situation.
If I look at line 124 and 125 of fromEvent.js, I see an unused argument. I passed that through to the ember listener calls.
if (ember) {
return fromEventPattern(
function (h) { Ember.addListener(element, eventName, h); },
function (h) { Ember.removeListener(element, eventName, h); },
selector);
}
update 2
I submitted a pull request. I hope I’m right about this, or I’ll be beet-red.
