2016-06-10 72 views
0
getGeoLevelDetails: function(id) { 
    window.gid = id; 
} 

我要訪問window.gidrenderGeoLevelDetails功能想從功能訪問變量來渲染功能骨幹

renderGeoLevelDetails: function(response, obj){ 
    var id = this.getGeoLevelDetails.gid; 
    console.log(id); 
} 

這isshowing我輸出

Uncaught TypeError: Cannot read property 'gid' of undefined

+0

爲什麼你不能直接'var id = window.gid'? – Kumar

回答

1

中有幾個錯誤你的方法。

第一個你正在定義一個全局變量分配給DOM窗口對象,這是一個函數,我不知道它在哪裏聲明。但在這個階段這並不重要。

第二個您希望通過調用上述函數來獲取分配給全局變量的值,該函數不返回任何內容。

這裏有幾個選擇:要麼將值賦給全局變量(這是一個非常糟糕的做法,這應該在任何情況下都應該避免)。

更好的方法是簡單地返回id

getGeoLevelDetails: function(id) { 
    return id; 
} 

稍後,您可以通過調用renderGeoLevelDetails函數來獲取此ID。

renderGeoLevelDetails: function(response, obj) { 
    var id = this.getGeoLevelDetails(); 
} 

請注意,這只是工作,如果你調用來自同一範圍this.getGeoLevelDetails功能,因爲this是同一個對象的實例。

有關於這行代碼中的另一個大錯誤:

this.getGeoLevelDetails.gid; 

首先你是不是調用的功能,但作爲一個實例變量,期待返回全局聲明的對象。這就是你所得到的理由:

Uncaught TypeError: Cannot read property 'gid' of undefined


TL; DR

綜上所述,如果你想從一個模型轉換的值到一個視圖,你可以通過調用訪問此視圖中的模型,或者如果您希望在同一視圖中獲取值,則可以使用上面介紹的方法。

如果上述解決方案都不符合您的需求,您可以採用另一種方法:擴展Backbone對象,然後聲明一個接收所需值的對象變量。這樣,您將消除全球污染問題:

例子:

Backbone.Details = _.extend({}, Backbone.Router); 
Backbone.Details.geoLevel = id; 

這個變量:Backbone.Details.geoLevel然後會在應用程序的任何地方訪問。

+0

Endre謝謝你! – virushree