我对以下initialize方法有一个看法:
initialize: function(){
this.model.on("all", this.render)
},在呈现方法中,我使用以下方法访问模型的内容:
var contents = this.model.attributes.content;模型的content属性是一个数组。
因此,当我通过控制台使用model.set()向数组添加某些内容时,将调用render方法,但我得到以下错误:Uncaught TypeError: Cannot read property 'attributes' of undefined(…)。
但是在添加了如果我手动调用view.render()之后,它很好地呈现了模型。
同样,如果我添加了任何内容,它也会抛出相同的错误。
解决办法?
发布于 2016-07-28 07:16:42
问题可能是执行上下文( this值),其中执行render -由于事件触发器。
如果您要放置一个调试器并检查由模型更改执行的this在render中的值,它将不会保存view的引用。
您可以通过将第三个参数传递给on (如骨干文件中指定的)来修复这个问题。
this.model.on( 'all', this.render, this );第三个参数是上下文,其中将执行render。这意味着,无论作为第三个参数传递什么,都将是this函数中的render值。
最好使用listenTo而不是on,因为它比on更好地清理事件。您可以在堆栈溢出问题主干网js .listenTo对.on上读到关于同一件事的很好的解释。
因此,初始化将编写为:
initialize: function() {
this.listenTo( this.model, 'all', this.render );
}此外,我还建议使用model中可用的model方法来访问它的属性,因此,不要通过this.model.attributes.content访问content,而是使用this.model.get( 'content' )。
希望它有帮助:)
发布于 2016-07-28 07:15:35
由于您正在使用this.model.on("all", this.render)进行侦听,所以您的呈现函数将以上下文的形式获取模型,即当回调被称为'this‘时,将引用模型。尝试使用this.listenTo(this.model, "all", this.render)。这样您就可以设置上下文。
https://stackoverflow.com/questions/38627999
复制相似问题