2013-03-11 48 views
4


我正在使用Backbonejs開發Web應用程序。 我有一個用例,我必須將div1的新位置傳遞給Backbone視圖的雙擊事件處理程序。將數據傳遞到主幹視圖中的事件處理程序

我的代碼看起來像

var MyView = Backbone.Views.extend({ 
    events: { 
    'dblclick #div1' : 'div1ClickHandler' //here I want to pass new offset for #div1 
    } 
}); 

div1ClickHandler: function() 
{ 
...... 
} 

var myView = new MyView({model: myModel,el : #div1}); 
+0

你能解釋一下你的新職位是什麼意思嗎?你如何計算它? – sachinjain024 2013-03-11 06:52:38

+0

myView對象放在jquery小部件下。雙擊小部件大小隨其偏移量一起更改。我正在採取新的立場和維度。請注意,我沒有任何控件的部件。 – bitsbuffer 2013-03-11 07:45:16

+0

所以jquery小部件給你新的尺寸和大小。 – sachinjain024 2013-03-11 07:49:01

回答

2

假設你的視圖元素是jQuery的小部件的子元素,最好的辦法可能是抓住你單擊處理程序需要的值:

var MyView = Backbone.Views.extend({ 
    events: { 
    'dblclick #div1' : 'div1ClickHandler' 
    } 
}); 

div1ClickHandler: function() 
{ 
    var $this = $(this); 
    var $widget = $this.parents('.widget-selector:first'); 
    $this.offset($widget.offset()); 
    $this.height($widget.height()); 
    $this.width($widget.width()); 
} 

var myView = new MyView({model: myModel,el : #div1}); 

如果jQuery插件總是您的視圖元素的直接父代,您可以用parent()代替parents('.widget-selector:first');否則,你需要用一個選擇器代替.widget-selector,這個選擇器可以用於jquery控件。

+1

謝謝,這肯定會工作。事實上,我曾嘗試這種認同。但我想知道爲什麼數據不能傳遞給處理函數的參數。它是否存在一些設計問題。如果它讓我知道。 – bitsbuffer 2013-03-11 18:36:48

+2

Backbone不支持將任意數據傳遞給事件處理程序。如果數據作爲參數傳入,它將在第一位計算出來? – Ben 2013-03-11 18:48:39

4

你可以這樣做:內div你需要添加一個新的字段名稱data-yourfieldName和JS調用:

yourFunctionName: function(e) { 
    e.preventDefault(); 
    var email = $(e.currentTarget).data("yourfieldName"); 

} 
+0

毫無疑問,這是從DOM獲取數據的好方法,但在這種情況下,我們必須從jQuery小部件獲取數據。不是嗎? – sachinjain024 2013-03-11 08:10:48

2

您可以在窗口小部件通過查看本身,那麼您將完全控制小部件。

var MyView = Backbone.Views.extend({ 
initialize: function(options) { 
    this.widget = options.widget; // You will get widget here which you passed at the time of view creation 
} 

events: { 
    'dblclick #div1' : 'div1ClickHandler' //here I want to pass new offset for #div1 
    } 
}); 

div1ClickHandler: function() { 
// Query to fetch new position and dimensions using widget 
    // update the respective element 

} 

var myView = new MyView({model: myModel, el: $('#div1'), widget: widgetInstance}); 
相關問題