骨干视图渲染方法默认参数

时间:2013-04-15 23:41:55

标签: backbone.js backbone-views backbone-events

我有一个与模型相关的骨干视图。 View正在侦听更改方法,如果更改了模型,它将调用render。

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方法传递任何内容。

和主干文档没有提到这一点:http://documentcloud.github.io/backbone/#View-render

4 个答案:

答案 0 :(得分:2)

更改事件传递model和散列options

在主干sources中:

 this.trigger('change', this, options);

所以documentation因为 mu太短已评论过:

  

更改”(模型,选项) - 当模型的属性发生变化时。

答案 1 :(得分:0)

据我所知,渲染函数不应该传递任何参数

  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();

        }
   });

来自Backbone网站“告诉某个对象在”其他“对象”上收听特定事件

答案 2 :(得分:0)

在View外部看起来还有其他渲染调用(除了事件监听器之外)。

如果你试试这个(听其他方法而不是渲染):

this.listenTo(this.model, 'change', this.customMethod);

然后在下面的视图中声明这个:

customMethod: function() {
    console.log(arguments, '<==== is there arguments?');
    if(this.model){
        console.log("Custom Render Method For model:",this.model.cid);
    }
}

因此,请在代码中查看,除了model.change监听器之外,您还要在视图外调用render方法。

答案 3 :(得分:0)

如果绑定多次发生,则会多次调用事件回调,即

this.listenTo(this.model, 'change', this.render);

正在执行多次。

如果多次触发change,也会发生这种情况。例如。您可以在for循环中而不是一次性设置模型的每个属性。

任何回调都会收到一个事件作为参数。 在你的情况下

render: function(data) {
    if(this.model){
        console.log("Render Method:",data," For model:",this.model.cid);
    }
}
调用view.render()时,

数据将被记录为未定义。 当change事件

触发时,数据将成为事件对象