2013-01-21 36 views
1

我在控制台中收到错误“对象[对象对象]没有方法'应用''。请参阅小提琴.. http://jsfiddle.net/vineet85/AQx63/6/模型更改时骨干视图不清爽

var RefreshingView = new Backbone.View.extend({ 
    initialize: function() { 
     this.model.on('change', this.render, this); 
    }, 
    render: function() { 
     this.$el.html(this.model.get('text')); 
    } 
}); 

var m = new Backbone.Model({text: new Date().toString()}); 
var myView = new RefreshingView({model: m, el: 'body'}); 

myView.render(); 

setInterVal(function() { 
    m.set({text: new Date().toString()}); 
}, 1000); 

回答

2

你的语法是有点过了,首先为“声明”您的视图和模型,你应该离开了新的关键字,第二你不应该试图“实例化”的Backbone.js的模型直接,尝试代替

var RefreshingView = Backbone.View.extend({ 
     el: 'body', 

     initialize: function() { 
      this.model.on('change', this.render, this); 
     }, 
     render: function() { 
      this.$el.html(this.model.get('text')); 
     } 
    }); 

    var MyModel = Backbone.Model.extend({ 
     text: null 
    }); 

    var m = new MyModel({ text: new Date().toString() }); 
    var myView = new RefreshingView({ model: m, el: 'body' }); 

myView.render(); 

setInterval(function() { 
    m.set({ text: new Date().toString() }); 
}, 1000); 

Updated jsFiddle

+0

(1)实例化'无覆盖Backbone.Model'以下呃懒得先延长它应该没问题。 (2)没有'setInterVal'函数。当扩展'Backbone.View'时,流浪'new'是AFAIK,真正的问题。 –

+0

我认为直接尝试和使用骨干模型并不被认为是好的做法,但我想如果你不需要任何默认值等,它不会受到伤害。 (至于setInterval我没有发现拼写错误,只要我看到有一些输出结果,我就停下来了......)。谢谢。 – Jack

+0

我想不出任何非设计的案例,我会使用非扩展的'Backbone.Model',但我不认为它有任何问题。我很确定我总是'var M = Backbone.Model.extend({})'但我不知道这是一种好习惯,坏习惯还是最佳做法:) –