在事件中调用渲染时,模型显示为未定义
Model shows as undefined when render is called at event
我有一个使用以下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()
,它会很好地渲染模型
再次,如果我添加任何内容,它将抛出相同的错误
解决方案?
问题可能是执行render
的上下文(this
的值)-由于事件触发器。
如果您放置一个调试器,并在模型更改执行的render
中检查this
的值,那么它将不会包含view
的引用。
您可以通过将第三个参数传递给on
来解决这个问题,如主干文档中所指定的:
this.model.on( 'all', this.render, this );
第三个参数是执行render
的上下文。这意味着,无论您传递什么作为第三个参数,都将是render
函数中this
的值。
最好使用listenTo
而不是on
,因为它以比on
更好的方式清理事件。你可以在stackoverflow问题Backbone js.listenTo vs.on.上阅读到对同样事情的解释
因此初始化将写为:
initialize: function() {
this.listenTo( this.model, 'all', this.render );
}
此外,我建议使用model
中可用的get
方法来访问其属性,因此使用this.model.get( 'content' )
代替this.model.attributes.content
访问content
。
希望有帮助:)
因为您正在使用this.model.on("all", this.render)
进行侦听您的render函数将获取模型作为上下文,即当回调被调用时,"this"将引用模型。尝试使用this.listenTo(this.model, "all", this.render)
。通过这种方式,您可以设置上下文。
- 显示模块模式在Knockout中设置模型的新实例
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- Three.JS OBJ模型未显示
- 代码点火器型号中未显示报警框.模型警报中的
- 显示/隐藏有关模型更改的指令内容
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 如果所有模型值都不为空,则显示角度
- Collada模型在Three.js中显示为黑色
- 加载 .dae 模型时不显示纹理
- 我的html5应用程序无法显示模型
- 使用模型创建实例显示'不是函数'(节点使用猫鼬)
- Collada模型面在three.js中未正确显示
- 如何在客户端的元窗口小部件(JavaScript)中获取和显示更新的域模型
- 模型更新时触发ng显示
- 如何使用ng模型显示输入元素的不同值
- ExtJS4网格存储/模型显示空行
- ng模型显示重复值
- SQL帮助~关系数据库模型~显示结果
- Three.js Collada模型显示黑色,没有灯光,直到鼠标移动
- 在事件中调用渲染时,模型显示为未定义