Uncaught TypeError: Cannot read property 'app' of undefined
Asked Answered
A

2

1

I have a composite view:

var resultView = Marionette.CompositeView.extend({
        template : ResultPanel,
        itemView : ResultItemView,
        initialize : function() {
            ...
        },
        itemViewOptions : {
            app : this.options.app
        },

I just want to assign this view's app property to itemView's app property. So i can use this view's app from other view. But I'm getting this error: Uncaught TypeError: Cannot read property 'app' of undefined. What am i doing wrong? Is there another way in order to do this?

Authorize answered 24/7, 2013 at 7:16 Comment(1)
You want to pass the app variable through the constructor? this refers to the {} object when declaring this wayDougall
L
0

possiblity #1: this.option is not yet set when your code executes.

possibility #2: maybe 'this' is not what you expect it to be. assign var that = this; before and use 'that' instead of 'this'.

or assign var _options = this.options; before extend() and use _options in the extend.

Lovesome answered 24/7, 2013 at 7:27 Comment(0)
F
0

options will be generated from the object that you supply to the constructor of your view. It includes everything except for things like model and collection

var rv = new resultView({model: something, app: something})

Which can then be accessed like so

var resultView = Marionette.CompositeView.extend({
        itemView : ResultItemView,
        initialize : function(options) {
             this.app = options.something;    
        },
        itemViewOptions : {
            app : this.options.app
        },

If you want to refer to these options in another method, you will need to attach the required variables to the view (this) itself.

You can't access things like the model from the options parameter, however they will automatically be attached to your view

Frightfully answered 25/7, 2013 at 1:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.