kaha
kaha

Reputation: 1417

Backbone.js - passing 2 models to 1 view

I'm trying to pass 2 models to the view, but it seems it is not working. Here is my example: http://jsfiddle.net/kahhor/jp4B6/14/ As you can see second alert is showing undefined...

May be I have wrong approach. What I'm trying to do is: in View1 bind event 'change' to Model1... Than by clicking button in View2, call function in Model1 which changes value, and automatically render View1, since it was binded to change event.

But don't forget that View2 has also its own Model2, which I created outside the view and than passed it like new View2({model:Model2});.

It might looked confusing at first, but I think it is simple thing that backbone can do. I just don't know how to do it :)

Thanks,

Upvotes: 15

Views: 11706

Answers (3)

sled
sled

Reputation: 14625

you can access custom parameters (options) from

window.PopupView = new PopupView({ model: LeftNotificationM, model2: PopupM});

like this:

window.PopupView = Backbone.View.extend({

    // code left out

    initialize: function () {
        this.model.bind('change:notification_num', this.render);
        alert(this.model);
        // your model2 option:
        alert(this.options.model2);
    },

   // code left out
});

Conclusion: "unrecognized options" of a view can be found in this.options

Upvotes: 24

Joel
Joel

Reputation: 1670

I just found this question and Sled's answer via Google and it helped me a lot - but just to update this 2 year old question and perhaps save some other Googlers the headache:

Backbone Views no longer automatically attach options passed to the constructor as this.options, but you can do it yourself if you prefer.

Vitaliy's Answer on a similar question shows you how:

initialize : function (options) {
  this.options = options || {};
}

Upvotes: 6

Alex Craft
Alex Craft

Reputation: 15416

Add this patch and pass any options directly to view.

    Backbone.View.prototype._configureWithoutThis = Backbone.View.prototype._configure;
    Backbone.View.prototype._configure = function(options) {
      this._configureWithoutThis(options);
      _.extend(this, this.options);
    }

Upvotes: 2

Related Questions