未捕获的TypeError:无法读取属性' app'未定义的

时间:2013-07-24 07:16:29

标签: javascript backbone.js view marionette

我有一个复合视图:

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

我只想将此视图的app属性分配给itemView的app属性。所以我可以从其他视图使用此视图的应用程序。但我收到此错误:未捕获TypeError:无法读取未定义的属性'app'。我究竟做错了什么?还有另一种方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:0)

可能性#1: 代码执行时尚未设置this.option。

可能性#2: 也许'这'不是你所期望的。 assign var that = this; 之前并使用'that'代替'this'。

或指定var _options = this.options;在extend()之前,在扩展中使用_options。

答案 1 :(得分:0)

options将从您提供给视图构造函数的对象生成。它包含除modelcollection

之外的所有内容
var rv = new resultView({model: something, app: something})

然后可以这样访问

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

如果要在其他方法中引用这些选项,则需要将所需的变量附加到视图(this)本身。

您无法从options参数访问model之类的内容,但它们会自动附加到您的视图中