Ahoj všichni! Backbone 1.0 byla vydána! Náhodou jsem se podíval na jejich stránky a viděl jsem, že 1.0 je oficiální, takže netuším, jak dlouho je venku. Proč mi to nikdo neřekl?!?!? V každém případě mohou být někteří z vás zvědaví, co tato nová verze přináší a jak mohou aktualizovat své aplikace, aby přinesly všechny nové úžasnosti. No, pojďme se podívat na tyto nové věci.
Události a jejich čištění
Tato první nová funkce byla většinou implementována jen proto, aby pomohla zmírnit problém známý jako zombie pohledy. Zombie pohledy jsou pohledy, které byly odstraněny z DOM a údajně zlikvidovány, ale stále zůstávají v paměti a nelze je posbírat. Důvod, proč nemohou být shromažďovány jako odpad, je ten, že poslouchají události na jiném objektu (jako je model nebo kolekce), což znamená, že odkazy na pohledy byly uloženy v těchto objektech.
Chcete-li tento problém vyřešit, Backbone.Events
získal několik nových metod:listenTo
a stopListening
. Od Backbone.View
dědí metody z Backbone.Events
, nyní máme tyto dvě metody k dispozici na našich pohledech. Teď raději než psát toto:
1 | this.model.on('event', this.someMethod, this); |
…můžeme napsat toto:
1 | this.listenTo(this.model, 'event', this.someMethod); |
…v našich konstruktérech. To nám dává dvě věci:
- Význam je trochu jasnější a ukazuje, jak chceme, aby vztah byl. Nyní název metody naznačoval, že nasloucháme události spíše než zpětnému volání předávanému jinému objektu, který má být volán při spuštění události. I když to ve skutečnosti nemění to, jak kód funguje v zákulisí, objasňuje to, jak chceme, aby vztahy byly.
- Když použijeme
listenTo
, ukládá události, které posloucháme, také do Zobrazení, takže nyní můžeme zavolatstopListening
a odstraní všechny posluchače událostí, které jsme nastavili pomocílistenTo
.
Jak již bylo zmíněno, stopListening
je protějšek k listenTo
. Na každou událost se registrujeme přes listenTo
bude zrušena, když zavoláme stopListening
. Můžete také určit, které události a zpětná volání se mají zrušit, stejně jako při použití off
na modelu, který posloucháte. Pokud tedy chcete přestat poslouchat událost ‚změna‘ na modelu, můžete zavolat:
1 | this.stopListening(this.model, 'change'); |
Nejlepší část o stopListening
je, že to vůbec nemusíte volat. Když zavoláte na číslo remove
v pohledu stopListening
bude také automaticky volána. To znamená, že pokud chcete zlikvidovat pohled, vše, co musíte udělat, je zavolat someView.remove();
a máte hotovo (za předpokladu, že nemáte odkazy na zobrazení jinde).
Tento druh funkcí byl přidán do mnoha Rozšíření páteře, ale nyní je zdarma s obyčejnou starou páteří. To může znamenat, že pokud aktualizujete svou verzi Backbone, budete se chtít ujistit, že aktualizujete i svá rozšíření, abyste měli jistotu, že nebudou v konfliktu s touto novou funkcí.
Ověření modelu
Nebyly zde přidány žádné speciální nové funkce, ale některé výchozí hodnoty a chování se změnily. Za prvé, ve výchozím nastavení nejsou modely automaticky ověřovány, když zavoláte set
. Jediný případ, kdy jsou automaticky ověřeny, je volání na save
. Model však můžete ověřit voláním set
předáním {validate: true}
možnost takto:
1 | model.set({'some':'property'}, {validate:true}); |
Další velkou změnou ověřování je, že bude spuštěna „neplatná“ událost, nikoli „chyba“, takže se ujistěte, že jste změnili své posluchače.
Aktualizace kolekce
Za starých časů, kdy jste volali fetch
na sbírce by odstranil všechny své staré modely a pouze vložil všechny nové, které získal. Nyní se pokusí aktualizovat kolekci přidáním, odebráním a sloučením modelů. Také update
sbírek metoda byla přejmenována na set
, takže je paralelní s názvem metody modelu. Toto je metoda, která fetch
používá k aktualizaci kolekce.
Pokud chcete použít starou funkci, kde fetch
přepíše všechny současné modely, můžete předat {reset:true}
možnost.
Dekódování trasy
Dříve Backbone.Router
by před předáním argumentů obslužným rutinám trasy ponechal segmenty URL tak, jak jsou, ale nyní, pokud segmenty URL obsahují data zakódovaná v URL, budou data před předáním obslužným rutinám dekódována. To by mělo usnadnit interpretaci argumentů obsluhy.
Závěr
Podle dokumentů na stránce Backbone Project Page se jedná o „větší zlomové změny“. Toto jsou některé velmi pěkné změny a já jsem obzvláště nadšený z té první, i když jsem přešel k používání rozšíření jako Marionette. Existuje spousta dalších změn, na které se pravděpodobně budete chtít podívat, pokud jste používali Backbone 0.9.2 nebo starší, které můžete vidět v protokolu změn. Všechny verze po 0.9.2 jsou technicky beta verze 1.0, takže se budete chtít podívat na změny pro každou z nich. Existuje spousta převratných změn a přidaných funkcí, které si nebudete chtít nechat ujít.