diff --git a/spec/javascripts/view.spec.js b/spec/javascripts/view.spec.js index 5264639306..1677f86e34 100644 --- a/spec/javascripts/view.spec.js +++ b/spec/javascripts/view.spec.js @@ -137,12 +137,24 @@ describe("base view", function(){ 'lila': 'zoidberg' } }); + var presetOptionsFn = Marionette.View.extend({ + options: function () { + return { 'fry': 'bender' }; + } + }); it("should take and store view options", function() { var viewInstance = new view({"Guybrush": "Island"}); expect(viewInstance.options.Guybrush).toBe("Island"); }); + it("should take and store view options as a function", function() { + var viewInstance = new view(function(){ + return { "Guybrush": "Island" } + }); + expect(viewInstance.options.Guybrush).toBe("Island"); + }); + it("should have an empty hash of options by default", function() { var viewInstance = new view; expect(typeof(viewInstance.options.Guybrush)).toBe("undefined"); @@ -152,6 +164,11 @@ describe("base view", function(){ var viewInstance = new presetOptions; expect(viewInstance.options.lila).toBe("zoidberg"); }); + + it("should retain options set on view class as a function", function() { + var viewInstance = new presetOptionsFn; + expect(viewInstance.options.fry).toBe("bender"); + }); }); describe("should expose its options in the constructor", function() { diff --git a/src/marionette.view.js b/src/marionette.view.js index ab31ef0b75..727956f7ee 100644 --- a/src/marionette.view.js +++ b/src/marionette.view.js @@ -13,7 +13,7 @@ Marionette.View = Backbone.View.extend({ // this is a backfill since backbone removed the assignment // of this.options // at some point however this may be removed - this.options = _.extend({}, this.options, options); + this.options = _.extend({}, _.result(this, 'options'), _.isFunction(options) ? options.call(this) : options); // parses out the @ui DSL for events this.events = this.normalizeUIKeys(_.result(this, 'events'));