Recientemente he comenzado a usar Backbone.js
. Me gusta la arquitectura, en términos de características es casi exactamente lo que necesito ...Backbone.js y su confusión API
... Sin embargo me encontré con las siguientes salvedades:
- Para
Collection
sget
significa algo diferente que paraModel
s. No hayset
. Se debe acceder a los atributos de forma regular. Lo encuentro bastante inconsistente. Es fácil confundir modelos y colecciones a veces. ¿Hay algo que se pueda hacer para superar esto? - La asignación de valores iniciales dentro de
Model.extend
no siempre funciona. Por ejemplo, asignandourl
no anula el comportamiento predeterminado. Esto solo se puede lograr mediante una llamada al métodoset()
. De nuevo, muy propenso a errores. - Todavía no sé si es necesario usar
get
/set
dentro de la llamadainitialize()
. - No entiendo por qué no puedo simplemente llamar al
_.bindAll(this)
dentro deinitialize()
y tengo que enumerar nombres de funciones específicas para que se vinculen así:_.bindAll(this, firstFunc, secondFunc, ...)
. Esto no es muy seco
Me gustaría saber: ¿cuáles son las mejores prácticas con respecto a las situaciones mencionadas? ¿Qué haces para que el marco sea más consistente? ¿Algún parche de mono? ¿Estoy haciendo algo mal/en contra de la convención?
Agradecería cualquier buen ejemplo del mundo real. Encontré esto: http://documentcloud.github.com/backbone/docs/todos.html y http://liquidmedia.ca/blog/2011/01/backbone-js-part-1/ y esos no resuelven ninguno de los problemas mencionados. De hecho, solo presentan las ideas más simples y absolutamente ningún caso de frontera, por lo que cualquier cosa más complicada podría ser útil.
EDIT:
Ok, y hay uno más fundamental creas que no entiendo:
- ¿Estoy siempre permite colocar atributos adicionales en la extensión de esta manera:
var SomeModel = Backbone.Model.extend({ myattribute: myvalue })
?- Si es así, ¿por qué no funcionan las siguientes llamadas al
new SomeModel().get("myattribute")
?
- Si es así, ¿por qué no funcionan las siguientes llamadas al
- ¿Qué es exactamente
this
dentro deinitialize()
? ¿Es clase de modelo o instancia modelo?
EDITAR (2):
Bueno, he encontrado esto: http://maccman.github.com/spine/. Parece que Backbone.js 2.0 también comparte un nombre similar :). Todavía no lo he probado, lo que podría ser un poco de un bloqueo de la demostración, ya que la biblioteca es muy reciente. Sin embargo, desde el lado de los documentos parece muy prometedor. Se deshace de la mayoría de los problemas que encontré, simplifica la API, incluso se deshace de la dependencia en underscore.js
que para una biblioteca es algo bueno. Publicaré mis hallazgos adicionales aquí.
Buena pregunta, yo también encontré Backbone un poco extraño. Debe agregar sus hallazgos como respuesta a su propia pregunta. – brianpeiris
@brianpeiris Lo haré tan pronto como establezca que efectivamente se puede usar. Hasta aquí todo bien. La columna vertebral realmente parece estar bien pensada. – julkiewicz