2011-12-06 84 views
4

由於某種原因,我需要使用一個變量作爲選擇在骨幹事件選擇,但我想不出如何做到這一點:使用變量在事件

app.views.Selfcare = Backbone.View.extend({ 
    events: { 
     click window.parent.document .close : "closeWindow" 
    }, 
    closeWindow: function() { 
     //code 
    } 
}); 

我已經使用不同範圍,我不能做「點擊.close」:「closeWindow」。

Thx尋求幫助。

回答

7

我看了看Backbone.js的源代碼,發現如果你的視圖的events是一個函數,那麼函數被調用,它的返回值被用作events對象。

這意味着你的代碼可以這樣改變:

app.views.Selfcare = Backbone.View.extend({ 
    events: function() { 
    var _events = { 
     // all "standard" events can be here if you like 
    } 
    _events["events" + "with variables"] = "closeWindow"; 
    return _events; 

    }, 
    closeWindow: function() { 
    //code 
    } 
}); 

THIS是源代碼的有趣的部分:

if (_.isFunction(events)) events = events.call(this); 

更新:

例可用於JSFiddle HERE **

+0

不錯。我會在接下來的幾個小時內嘗試這個,並告訴你。多謝。 – Flyingbeaver

+0

@Flyingbeaver我更新了我的答案和一個愚蠢的例子。祝你好運! :) – kubetz

+0

完美的工作,thx! – Flyingbeaver

1

我不確定你可以在那裏使用變量。您可以使用內置事件方法(請參閱documentation)添加自定義偵聽器,然後將事件偵聽器添加到window.parent.document以觸發該自定義事件(使用Events.trigger方法)。

這就是說,它會更容易完全脫鉤骨幹此事件(除非你不想這樣做),並走下來的addEventListener路線:

app.views.Selfcare = Backbone.View.extend({ 
    initialize: function() { 
     _.bindAll(this, 'render', 'closeWindow'); 
     if(this.options.clickTarget) { 
      this.options.clickTarget.addEventListener('click', this.closeWindow, false); 
     } 
    }, 
    render: function() { 
     // Render to the DOM here 
     return this; // as per Backbone conventions 
    }, 
    closeWindow: function() { 
     // Stuff here 
    } 
}); 

// Usage: 
var mySelfcare = new app.views.Selfcare({ 
    clickTarget: window.parent.document 
}); 

我認爲應該工作,雖然我還沒有測試過(可能會有一兩個語法錯誤!)

+0

Thx例如,我也在考慮拿出這個事件,但是我可以有很多。 Dzejkej解決方案似乎非常有趣。 – Flyingbeaver

+0

@Flyingbeaver:是的,剛剛看到這個解決方案,訴雅緻:) – SquareFeet