2013-12-16 36 views
1

我已經使用MVC在Backbone.js中構建我的應用程序。一切,是在Chrome /火狐/ IE運行良好,9及以上,但不是在IE8及以下: -對象不支持屬性或方法「綁定」 - Backbone.js

var userDetailView = backbone.View.extend({ 
    el: '#user-details', 
    tagName: 'div', 
    template: Handlebars.templates.UserDetails, 
    model: userModel, 

    initialize: function() { 
     _.bindAll(this, "render"); 
     this.model.bind('change', this.render); 
     return this; 
    } 
}); 

我得到如下錯誤: -

SCRIPT438:對象不支持財產或方法「綁定」

任何人都可以幫忙嗎?

+0

您在項目中是否包含下劃線? – backdesk

+0

@Crungmungus是的,我有。它在Chrome和Mozilla工作 – Shubh

回答

4

什麼是this.model?你如何實例化該視圖?我猜想this.model不是它應該的。在一個視圖中,model屬性應該是一個模型實例,你是想給說這樣的話:

var m = new Model; 
var v = new View({ model: m }); 

模型實例將有一個bind方法(AKA on),但是,在非石器時代的瀏覽器,so will a function

bind()方法創建新的功能,調用它時,具有其將此關鍵字設置爲所提供的值,與前述的當新功能被調用任何設置參數給定的序列。

模型 「類」:

var M = Backbone.Model.extend({ ... }); 

是一個功能(就像其他任何你能在JavaScript調用new上)。這意味着,你可以說這樣的事情在新的瀏覽器:

var M = Backbone.Model.extend({ ... }); 
var v = new View({ model: M }); 

this.model.bind('change', this.render)View內執行,也不會叫bind你正在尋找,但它會調用一個bind,它會調用Function.bind

開始將模型實例傳遞給您的視圖,事情應該開始變得更有意義。


澄清:如果您檢查MDN Browser compatibility section on Function.bind,你會看到,有沒有bind在IE功能,直到IE9。所以Chrome,Firefox和IE9都支持在函數上調用bind,但IE8不支持;這與觀察到的行爲精確匹配。

+0

他說:「在Chrome/Firefox/IE 9及更高版本中,一切運行良好,但在IE8及以下版本中無法運行」。就此而言,我們不能認爲這是一個與瀏覽器相關的問題嗎? – backdesk

+1

@Crungmungus:有些瀏覽器支持功能上的bind,有些則不支持。 「IE8及以下」是一個贈送。 –

+0

@Crungmungus:你可能想看看[「瀏覽器兼容性」](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Browser_compatibility)部分「Function.bind」上的MDN頁面,並特別注意「IE9」部分。 –

相關問題