creé la siguiente técnica en mi sitio
class FooView extends MyView
tag: "div"
modelBindings:
"change form input.address" : "address"
"change form input.name" : "name"
"change form input.email" : "email"
render: ->
$(@el).html """
<form>
<input class="address"/>
<input class="name"/>
<input class="email"/>
</form>
"""
super
@
# Instantiate the view
view = new FooView
model: new Backbone.Model
$("body").html(view.el)
he detallado las ampliaciones de la columna vertebral que necesita para hacer en mi blog
http://xtargets.com/2011/06/11/binding-model-attributes-to-form-elements-with-backbone-js/
que utiliza el mismo estilo declarativo la propiedad de eventos para vincular los elementos de formulario con los atributos del modelo
y aquí está el código real implementación de la clase para ti en CoffeeScript
class MyView extends Backbone.View
render: ->
if @model != null
# Iterate through all bindings
for selector, field of @modelBindings
do (selector, field) =>
console.log "binding #{selector} to #{field}"
# When the model changes update the form
# elements
@model.bind "change:#{field}", (model, val)=>
console.log "model[#{field}] => #{selector}"
@$(selector).val(val)
# When the form changes update the model
[event, selector...] = selector.split(" ")
selector = selector.join(" ")
@$(selector).bind event, (ev)=>
console.log "form[#{selector}] => #{field}"
data = {}
data[field] = @$(ev.target).val()
@model.set data
# Set the initial value of the form
# elements
@$(selector).val(@model.get(field))
super
@
appologies si no te gusta CoffeeScript. Hago. Todos son diferentes :)
Terminé haciendo exactamente eso. Yo trabajo muy bien hasta ahora. Como dijiste ahorra en cada cambio en la entrada. Los errores se muestran inmediatamente, lo que es bueno y malo (los campos no modificados mostrarán errores como no pueden estar en blanco al crear un registro). – Julien
1. también se puede probar el evento blur. 2. He estado reflexionando sobre este tema, sería útil tener una matriz de "enlaces" similar al hash "de eventos" que especifique las actualizaciones entre las partes de la vista y los atributos del modelo con parámetros de tipo de sincronización (at_change, at_blur, etc.) . say similar a 'bindings: [[" div # title "," model.title "," change "," <- "], [" input # description "," model.description "," change "," <-> " ]] 'o algo así, debería ser bastante fácil de implementar. – clyfe
Creo que puedes usar Handlebar.js como un motor de plantillas. Tiene este tipo de enlaces. – Julien