Používám Rails3 jako svůj backend a Jammit to Asset... Nyní se snažím nekomprimovat a dokonce zabalit aktiva.
Jednoduchá událost se nespustí, ale alert(‘asd’) int initialize funguje podle očekávání.
Už jsem zkoušel i jiné druhy událostí v jiných objektech, ale nefungovalo to.
Můj kód je následující:
var InvoiceStock = Backbone.View.extend({ initialize: function(args) { _.bindAll(this, 'find_product', 'product_added'); this.products = new ProductCollection(); this.products.bind('add', this.product_added); alert('asd'); }, events: { "keypress #product_finder": "find_product" }, find_product: function(e) { alert('teste'); }, product_added: function(product) { alert('pqp4'); } });
a můj RUBY HTML:
<%= text_field 'search', :isbn_or_isbn10_or_publisher_or_authors_or_name_like, :id => 'product_finder' %> ou <%= link_to 'criar um produto', '', :id => 'new_product_link' %>.
který generuje toto:
<label>Adicionar</label> <input id="product_finder" class="ui-autocomplete-input" type="text" size="30" name="search[isbn_or_isbn10_or_publisher_or_authors_or_name_like]" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true"> ou <a id="new_product_link" href="">criar um produto</a>
Odpověď
Pohledy na páteř se odehrávají v kontextu prvku. Aby tento kód fungoval, musíte tento prvek přiřadit k pohledu v době výstavby takto:
var InvoiceStock = Backbone.View.extend({ el: $('#product_finder').parent() ...
Nebo přiřaďte el konkrétní objekt DOM, který obsahuje vyhledávač produktů. Alternativně můžete prvek vygenerovat dynamicky a pomocí jQuery jej připojit k vašemu DOM. Použil jsem obojí.
Páteř používá jQuery delegát ke specifikaci a kontextualizaci svých událostí. POKUD neurčíte nadřazený prvek pro celý pohled, Backbone nepřiřadí správce událostí správně.