2013-01-21 64 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({})'但我不知道這是一種好習慣,壞習慣還是最佳做法:) –