将数据传递到Backbone View中的事件处理程序

时间:2013-03-11 06:34:29

标签: javascript backbone.js


我正在使用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});

3 个答案:

答案 0 :(得分:4)

你可以这样做:在div内你需要添加一个名为data-yourfieldName的新字段,并从js调用:

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

}

答案 1 :(得分: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});

答案 2 :(得分:2)

假设你的view元素是jquery小部件的子元素,那么最好的办法就是在click处理程序中获取你需要的值:

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小部件始终是view元素的直接父级,则可以将parents('.widget-selector:first')替换为parent();否则,您需要使用适用于jquery小部件的选择器替换.widget-selector