Backbone.js 主干视图渲染方法默认参数
我有一个与模型关联的主干视图。视图正在侦听change方法,如果模型发生更改,它将调用renderBackbone.js 主干视图渲染方法默认参数,backbone.js,backbone-views,backbone-events,Backbone.js,Backbone Views,Backbone Events,我有一个与模型关联的主干视图。视图正在侦听change方法,如果模型发生更改,它将调用render this.listenTo(this.model, 'change', this.render); 我遇到一个问题,我的主干视图的渲染方法被多次调用。我正在试着调试这个问题。为此,我在render方法中添加了console.log语句: render: function(data) { if(this.model){ console.log("Render Method:
this.listenTo(this.model, 'change', this.render);
我遇到一个问题,我的主干视图的渲染方法被多次调用。我正在试着调试这个问题。为此,我在render方法中添加了console.log语句:
render: function(data) {
if(this.model){
console.log("Render Method:",data," For model:",this.model.cid);
}
}
现在这个数据值有时会打印为未定义或类似于模型的内容。有人知道传递给模型更改侦听器的参数是什么吗
注意:我没有向render方法传递任何内容
主干文档没有提到这一点:据我所知,渲染函数不应该有任何参数传递给它
Event.Listen=Backbone.View.extend({
model: 'something'
initialize:function(){
this.listenTo(this.model,'change',this.render);
}
render:function(){
//is called when the listen to event is triggered
//if(this.model) does not make a lot of sense?? Does it need to be
//true ornull
//call another object
new Event.DoSomething();
}
});
从主干站点“告诉对象侦听上的特定事件”到“其他”对象”在视图外部看起来,还有其他要渲染的调用(除了事件侦听器) 如果尝试此方法(请听其他方法而不是渲染): 然后在下面的视图中声明渲染:
customMethod: function() {
console.log(arguments, '<==== is there arguments?');
if(this.model){
console.log("Custom Render Method For model:",this.model.cid);
}
}
customMethod:function(){
log(参数,如果绑定发生多次,则会多次调用事件回调,即
this.listenTo(this.model, 'change', this.render);
正在执行多次
如果多次触发更改
,也会发生这种情况。例如,在for循环中设置模型的每个属性,而不是一次设置
任何回调都会接收一个事件作为参数。
就你而言
render: function(data) {
if(this.model){
console.log("Render Method:",data," For model:",this.model.cid);
}
}
调用view.render()
时,数据将被记录为未定义。
当由更改
事件触发时,数据将成为事件对象更改事件通过模型
和选项的散列
在主干中:
因此,在《as mu太短》一书中,他评论道:
更改(模型,选项)-当模型的属性更改时
但它确实以某种方式获得了参数,我只是想知道该参数是什么,以及它是否有助于我调试“change”
事件处理程序如何获得两个参数:谢谢,这是我一直在寻找的。你问:“有人知道传递给render方法的默认参数是什么吗?”然后,您需要询问,传递给模型更改事件侦听器的参数是什么?渲染视图没有默认参数。对此我深表歉意,丹尼尔,编辑我的问题没有问题,谢谢!如果您将函数参数列表留空,有时控制台将不会显示参数。我建议添加function(a,b,c,d,e,f){
添加一个长参数列表将确保显示所有参数。这有些过分,但每次都有效。@CoryDanielson你能举个例子吗?我个人从未遇到过这种情况,所以我很感兴趣。不,我只是注意到有时候控制台很奇怪,除非我给出了函数,否则不会显示参数虚拟参数。可能是由于旧版本的chrome或其他原因,我不确定。但这很烦人。
render: function(data) {
if(this.model){
console.log("Render Method:",data," For model:",this.model.cid);
}
}
this.trigger('change', this, options);