2013-06-24 4 views
1

Я не могу привязать событие click к действию в фрагменте ниже. Есть идеи?Невозможно связать событие click в Backbone

var SelectView = Backbone.View.extend({ 
    template: "#select-template", 
    initialize: function() { 
    this.render(); 
    }, 
    events: { 
    "click .placeholder": "optionsDropdown", 
    }, 
    render: function() { 
    context = {className: this.className, options: this.model.get("options"), placeholder: this.model.get("placeholder")}; 
    $(this.el).html(getHTML(this.template, context)); 
    }, 
    optionsDropdown: function() { 
    alert("Hello"); 
    }, 
}); 
+0

ли работа, если в вашем 'initialize' метода вы делаете' это $ el.on ("щелчок", this.optionsDropdown). '? – mash

+0

@Mash: Нет, я просто попробовал это. По какой-то причине я не могу подключиться к нему. –

+0

вам не хватает целевого элемента (el), я внесла изменения в свой ответ и добавил рабочий скрипт –

ответ

1

Я думаю, что проблема эта линия

className: this.className 

Я не вижу переменную Classname где-нибудь в определении вида

var SelectView = Backbone.View.extend({ 
    initialize: function() { 
     this.className = 'placeholder'; 
    }, 
    events: { 
     "click .placeholder": "optionsDropdown", 
    }, 
    render: function() { 
     context = { 
      className: this.className, 
      options: this.model.get("options"), 
      placeholder: this.model.get("placeholder") 
     }; 
     var template = _.template($("#select-template").html(), context); 

     this.$el.html(template); 
    }, 
    optionsDropdown: function() { 
     alert("Hello"); 
    }, 
}); 

var Model = Backbone.Model.extend({}); 

var newModel = new Model({ 
    'options' : 'Hello', 
    'placeholder' : 'Type your name' 
}); 

var newView = new SelectView({model : newModel}); 
newView.render(); 
$('.container').append(newView.el); 

Check Fiddle

Вы связываете событие click для class="placeholder", которое должно быть в шаблоне. Определив, что он должен работать, если у вас есть элемент с этим классом в вашем шаблоне.

Calling render from initialize

+0

Может ли downvoter объяснить? –

+0

ошибка все еще существует чувак http://jsfiddle.net/FGeJd/2/ –

+0

@GokulKav .. Проверить обновление .. –

0

вы можете иметь DOM элемент переплетен в обработчик, например, "click li":"optionsDropDown"

редактирования: вам не хватает целевой элемент .. Heres рабочей скрипки http://jsfiddle.net/FGeJd/

+0

Это неверно. «Опускание селектора заставляет событие привязываться к корневому элементу представления (this.el)» - [Магистральная документация] (http://backbonejs.org/#View-delegateEvents) – Scadoodles

+1

По умолчанию 'el' будет div , так что это не должно быть проблемой –

+1

да, но это будет сиротой, пока вы не введете ее в DOM, и вам нужно сделать что-то вроде '$ ('# selection-parent'). html (новый SelectView(). render() .el); '.. переход в' el' как 'new SelectView ({el: '#selection'})' был бы лучшим подходом, чем наличие сироты div –

0

Вы упускаете селектор в определении события. Это должно быть что-то вроде этого (при условии ввода идентификатора optionsId):

events : { 
    "click #optionsId": "optionsDropDown" 
} 
+0

У нас был селектор там - я был пытаясь не только для ударов. Не работает в любом случае. –

+0

Попробуйте вызвать render() извне самого представления, то есть из маршрутизатора. Кроме того, render() должен возвращать 'this'. – MrTorture

+0

В маршрутизаторе у вас должно быть что-то вроде этого: 'this.elms ['page-content']. Html (view.render(). El);' – MrTorture