javascript - backbone - event not fired on selected element changed -


i'm generating drop down list backbone.view.
after attaching dom, change event not fired. delegateevents doesn't fixes it. can show me blind spot is?

model , collection:

app.models.dictionaryitem = backbone.model.extend({         default: {             key: '',             value: '', id: 0         }     });      app.collections.dictionary = backbone.collection.extend({         model: app.models.dictionaryitem,         initialize: function (models, options) {          },         parse: function (data) {             _.each(data, function (item) {              //   if(item){                 var m = new app.models.dictionaryitem({ key: item.code, value: item.name });                 this.add(m);            // }             }, this);         }     }); 

views:

app.views.itemview = backbone.view.extend({         tagname: 'option',         attributes: function () {             return {                 value: this.model.get('key')             }         },         initialize: function () {             this.template = _.template(this.model.get('value'));         },         render: function () {             this.$el.html(this.template());             return this;         }     });      app.views.collectionview = backbone.view.extend({         tagname: 'select',         attributes: {             'class': 'rangeslist'         },         events: {             'change .rangeslist': 'onrangechanged'         },         initialize: function (coll) {             this.collection = coll;         },         render: function () {             _.each(this.collection.models, function (item) {                 this.$el.append(new app.views.itemview({ model: item }).render().el);             }, this);            // this.delegateevents(this.events);             return this;         },         selected: function () {             return this.$el.val();         },         onrangechanged: function () {             alert('changed');         }     }); 

rendering:

var coll = new app.collections.dictionary(somedata, { parse: true }); var v= new app.views.collectionview(coll); var vv=v.render().el;  //   new app.views.collectionview(coll).render().el; $('body').append(vv) 

the tagname , attributes on collectionview:

tagname: 'select', attributes: {     'class': 'rangeslist' }, 

say el <select class="rangeslist">. events:

events: {     'change .rangeslist': 'onrangechanged' }, 

are listening 'change' events .rangeslist inside view's el. fine manual:

events written in format {"event selector": "callback"}. [...] omitting selector causes event bound view's root element (this.el).

so you're trying listen events doesn't exist. if want listen events directly view's el leave out selector:

events: {     'change': 'onrangechanged' } 

Comments

Popular posts from this blog

Spring Boot + JPA + Hibernate: Unable to locate persister -

go - Golang: panic: runtime error: invalid memory address or nil pointer dereference using bufio.Scanner -

c - double free or corruption (fasttop) -