Trigger-Funktion, wenn der Benutzer die änderungen Eingangswert (backbone.js)
Ich habe gerade angefangen mit backbone.js und macht derzeit eine Seite, die ein div - #listing_filter
mit text-input-Elemente und eine Tabelle zeigt einige Angebote geholt von einem RESTful backend (PHP/Codeigniter). Die Werte in die text-Eingabe wird als Filter fungieren, um die Ergebnisse einzugrenzen vom server abgerufen.
Problem:, Wenn der Wert in einem der Textfelder ändert, möchte ich den browser um eine Reihe von Ergebnissen, basierend auf den filter-Werten. Unten ist mein Versuch, wo die updateFilter
Funktion nicht ausgelöst, obwohl der text-input-Wert geändert wurde. Irgendwelche Ideen, was falsch gelaufen ist?
Andere Frage wird sein, ob ich sollte den Inhalt #listing_filter
in eine Vorlage, oder einfach nur fest in den Hauptteil HTML? Danke!
JS-Code
window.ListingFilterView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'updateFilter');
},
events: {
'change input' : 'updateFilter'
},
updateFilter: function() {
console.log('hey');
}
});
//Router
var AppRouter = Backbone.Router.extend({
routes: {
'': 'listings',
},
listings: function() {
//... some other code here
this.listingFilterView = new ListingFilterView();
}
});
HTML-Code
<div id="listing_filter">
Price: <input type="text" id="listing_filter_price" />
Beds: <input type="text" id="listing_filter_bedroom" />
Baths: <input type="text" id="listing_filter_bathroom" />
</div>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Backbone-Ansicht wird nur auf Ereignisse reagieren, die auf die Ansicht
el
oder auf Elemente, die innerhalb seinerel
. Standardmäßig ist die Ansichtel
ist nur ein leeres<div>
und Sie sind sich nicht sagen, den Blick auf etwas anderes.Können Sie sagen, die Ansicht, die
el
zu verwenden (http://jsfiddle.net/ambiguous/5yXcU/1/):oder Sie lassen den Blick fügen sich die auf das element mit
setElement
(http://jsfiddle.net/ambiguous/APEfa/1/):oder legen Sie die
el
bei der Definition der Sicht (http://jsfiddle.net/ambiguous/nyTZU/):Sobald das aus dem Weg ist, werden Sie brauchen, um zu verstehen, dass ein
<input>
nicht auslösen eines change-Ereignis bis es den Fokus verliert so müssen Sie warten, bis der Benutzer auf Registerkarte-von der Eingabe oder wechseln Sie zu hören fürkeypress
Veranstaltungen und mit einem timer, um festzustellen, Wann Sie aufgehört habe, zu Tippen.window.ListingFilterView = Backbone.View.extend({ el: '#listing_filter' // ... }
. btw, brauchst du nicht zu übergeben, jQuery-Objekt, um dieel
- Attribut, die Sie nicht passieren konnten, nur einen string:var v = new V({ el: '#listing_filter' });