首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模型显示为在事件时调用呈现时未定义的。

模型显示为在事件时调用呈现时未定义的。
EN

Stack Overflow用户
提问于 2016-07-28 05:49:18
回答 2查看 258关注 0票数 0

我对以下initialize方法有一个看法:

代码语言:javascript
复制
initialize: function(){
    this.model.on("all", this.render)
},

在呈现方法中,我使用以下方法访问模型的内容:

代码语言:javascript
复制
var contents = this.model.attributes.content;

模型的content属性是一个数组。

因此,当我通过控制台使用model.set()向数组添加某些内容时,将调用render方法,但我得到以下错误:Uncaught TypeError: Cannot read property 'attributes' of undefined(…)

但是在添加了如果我手动调用view.render()之后,它很好地呈现了模型。

同样,如果我添加了任何内容,它也会抛出相同的错误。

解决办法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-28 07:16:42

问题可能是执行上下文( this值),其中执行render -由于事件触发器。

如果您要放置一个调试器并检查由模型更改执行的thisrender中的值,它将不会保存view的引用。

您可以通过将第三个参数传递给on (如骨干文件中指定的)来修复这个问题。

代码语言:javascript
复制
this.model.on( 'all', this.render, this );

第三个参数是上下文,其中将执行render。这意味着,无论作为第三个参数传递什么,都将是this函数中的render值。

最好使用listenTo而不是on,因为它比on更好地清理事件。您可以在堆栈溢出问题主干网js .listenTo对.on上读到关于同一件事的很好的解释。

因此,初始化将编写为:

代码语言:javascript
复制
initialize: function() {
    this.listenTo( this.model, 'all', this.render );
}

此外,我还建议使用model中可用的model方法来访问它的属性,因此,不要通过this.model.attributes.content访问content,而是使用this.model.get( 'content' )

希望它有帮助:)

票数 3
EN

Stack Overflow用户

发布于 2016-07-28 07:15:35

由于您正在使用this.model.on("all", this.render)进行侦听,所以您的呈现函数将以上下文的形式获取模型,即当回调被称为'this‘时,将引用模型。尝试使用this.listenTo(this.model, "all", this.render)。这样您就可以设置上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38627999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档