2011-11-21 85 views
4

我有鏈接,我想根據鏈接做不同的事情。因此,我有一個數據結構:如何在不使用eval()的情況下在Backbone.js中執行不同操作的鏈接?

 
var data = [{"name":"foo", "onClick":"baz()"}, {"name":"bar", "onClick":"bam()"}]; 

目前,在視圖中我有一個函數運行這需要的項目,並做的eval(item.onClick),和這樣的作品,只是感覺就像一個安全漏洞。 渲染視圖時,我可以將onClick放入html中,但感覺不對。

有誰知道一種方法來做到這一點?

回答

3

您可以在數據

var data = [{"name":"foo", "onClick":baz}, {"name":"bar", "onClick":bam}]; 
item.onClick(); 

嵌入功能,你可以看看here更多有用的東西怎麼辦呢

+0

這可能不會改變可能出現的安全問題,但它確實工作。但只要你能信任源代碼,就不會有任何安全風險,只是不要評估任何用戶可能輸入的內容。 –

3

骨幹觀點有delegateEvents function

var MyView = Backbone.View.extend({ 

    events: { 
    "click button[name='foo']": "baz", 
    "click button[name='bar']": "bam" 
    }, 


    baz: function(){ ... } 

    bam: function(){ ... } 
+0

與此問題是,它不允許該方法是數據驅動 – chacham15

0

容易 - 即使你沒有爲你的函數調用實現一個對象容器。

function baz(){ 
    .... 
} 
function bam(){ 
    .... 
} 

而且,假設你有這個作爲你的JSON回調:

function jsonCallback(data){ 
    /*some code*/ 
    window[data.onClick](); 
    /* some more code */ 
} 
相關問題