Spinální chirurgie:Upgrade na Backbone 1.0

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 zavolat stopListening 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.