简体   繁体   中英

Uncaught TypeError: Cannot read property 'app' of undefined

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?

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM