diff --git a/public/javascripts/diaspora.js b/public/javascripts/diaspora.js index d1948c14e3a99859be2202a057fb32e6b7aeca3c..8b2e8c032929a00f0e6056ec1cca72f3519c0493 100644 --- a/public/javascripts/diaspora.js +++ b/public/javascripts/diaspora.js @@ -37,8 +37,8 @@ } }; - Diaspora.WidgetCollection.prototype.subscribe = function(id, callback) { - this.eventsContainer.bind(id, callback); + Diaspora.WidgetCollection.prototype.subscribe = function(id, callback, context) { + this.eventsContainer.bind(id, $.proxy(callback, context)); }; Diaspora.WidgetCollection.prototype.publish = function(id) { diff --git a/public/javascripts/widgets/infinite-scroll.js b/public/javascripts/widgets/infinite-scroll.js index 923573cdd1ac7c97963fdf884e534f8c23df1dfc..1143a37f2590dc8ceb9d5d087ed3fac5a9460a98 100644 --- a/public/javascripts/widgets/infinite-scroll.js +++ b/public/javascripts/widgets/infinite-scroll.js @@ -28,12 +28,7 @@ }; InfiniteScroll.prototype.start = function() { - var __bind = function(fn, me){ - return function(){ - return fn.apply(me, arguments); - }; - }; - Diaspora.widgets.subscribe("stream/reloaded", __bind(this.initialize, this)); + Diaspora.widgets.subscribe("stream/reloaded", this.initialize); this.initialize(); }; diff --git a/spec/javascripts/diaspora-spec.js b/spec/javascripts/diaspora-spec.js index daff88ca0849ce4544debb9296165e8e51159f8f..ffbf289eb59b9f3e19757dd3c8811302854c701c 100644 --- a/spec/javascripts/diaspora-spec.js +++ b/spec/javascripts/diaspora-spec.js @@ -58,6 +58,17 @@ describe("Diaspora", function() { widgets.subscribe("testing/event", function() { }); expect(widgets.eventsContainer.data("events")["testing/event"]).toBeDefined(); }); + + it("accepts a context in which the function will always be called", function() { + var foo = "bar"; + widgets.subscribe("testing/context", function() { foo = this.foo; }); + widgets.publish("testing/context"); + expect(foo).toEqual(undefined); + + widgets.subscribe("testing/context_", function() { foo = this.foo; }, { foo: "hello" }); + widgets.publish("testing/context_"); + expect(foo).toEqual("hello"); + }); }); describe("publish", function() {