gpt4 book ai didi

javascript - 在事件中调用渲染时模型显示为未定义

转载 作者:行者123 更新时间:2023-11-28 15:06:43 24 4
gpt4 key购买 nike

我有一个具有以下initialize方法的 View :

initialize: function(){
this.model.on("all", this.render)
},

在渲染方法中,我使用以下方式访问模型的内容:

var contents = this.model.attributes.content;

模型的 content 属性是一个数组。
因此,当我通过控制台使用 model.set() 添加某些内容到数组时,会调用 render 方法,但出现以下错误:Uncaught TypeError: Cannot read property 'attributes'未定义(…)
但是添加后,如果我手动调用 view.render() ,它会很好地渲染模型。
如果我再次添加任何内容,它会引发相同的错误。
解决方案?

最佳答案

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

如果您放置调试器并检查 this 的值里面render它由模型更改执行,它不会保留 view 的引用.

您可以通过将第三个参数传递给 on 来修复此问题。如 backbone documentation 中指定:

this.model.on( 'all', this.render, this );

第三个参数是 render 所在的上下文将被处决。意思是,无论您作为第三个参数传递什么,都将是 this 的值。里面render功能。

最好使用listenTo而不是on因为它以比 on 更好的方式清理事件做。您可以在 stackoverflow 问题 Backbone js .listenTo vs .on 阅读对同一件事的很好的解释。 .

因此初始化应写为:

initialize: function() {
this.listenTo( this.model, 'all', this.render );
}

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

希望有帮助:)

关于javascript - 在事件中调用渲染时模型显示为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38627999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com