2012-05-09 9 views
5

Así que he encontrado recientemente el atributo disabled en Em.TextField, sin embargo, parece que no puedo volver a habilitar el TextField después de haberlo extendido con la propiedad disabled establecida en true.Emberjs - Deshabilitar y habilitar TextField

var app = Em.Application.create(); 
app.randomObj = Em.Object.create({ 
    temp: null 
}); 
app.textField = Em.TextField.extend({ 
    valueBinding: 'app.randomObj.temp', 
    disabled: true 
}); 

¿Cómo elimino la propiedad deshabilitada con Ember?

+0

No estoy seguro de qué era entonces cuando publicaste esta pregunta, pero definitivamente es posible definir la propiedad deshabilitada dentro de la vista sin ningún tipo de enlaces de controlador. – asaf000

Respuesta

7

Existen algunos problemas con el código de muestra, los abordaré y espero poder aclarar algunas cosas.

convención de nomenclatura

En primer lugar usted debe echar un vistazo a la Emberist post sobre naming conventions: Las clases deben ser nombrados mayúsculas y minúsculas casos - excepción para las aplicaciones y los espacios de nombres. Entonces en su JSFiddle provisto en su comment es App.controller y App.ATextField.

Declarar aplicación como variable global

Usted está creando una instancia de un Ember.Application y asignándole a var app. Aunque debe tener cuidado al usar variables globales, en este caso debe definir su aplicación en el espacio de nombre global, por lo que debe ser App = Ember.Application.create(); respectivamente window.App = Ember.Application.create();. Al declarar la aplicación como variable global, puede usar la poderosa característica Bindings en sus plantillas y su código JS.

enlaces

Los enlaces deben ser declarados en los casos y no en clases. Con esto me refiero a que no definiría el valueBinding de su App.TextField en la definición de su clase, sino que lo movería a la instancia concreta, por ejemplo, en la plantilla.

En su JSFiddle provisto en su comment, su enlace al controlador no funciona porque no usa uno: para crear un enlace a un controlador/objeto específico ... deberá declarar el nombre de la propiedad Desea enlazar y agregar una cadena Binding. Entonces sería disabledBinding: 'App.controller.shouldDisable'.


Ejemplo

He refactorizado su código, consulte http://jsfiddle.net/pangratz666/pLpKV/:

Manillar:

{{view Ember.TextField 
    valueBinding="App.tempObj.hold" 
    disabledBinding="App.controller.shouldDisable"}} {{App.tempObj.hold}} 

JavaScript:

App = Em.Application.create(); 

App.controller = Em.Object.create({ 
    shouldDisable: true 
}); 

App.tempObj = Em.Object.create({ 
    hold: "initial value" 
}); 

// just to illustrate how to define bindings outside of templates, 
// we're adding a TextField with bindings setup the same as for the 
// template 
Ember.TextField.create({ 
    valueBinding: 'App.tempObj.hold', 
    disabledBinding: 'App.controller.shouldDisable' 
}).appendTo('body'); 
+0

Guau, esto es más de lo que podría haber esperado. Gracias por tomarse el tiempo para explicar realmente mis problemas, realmente lo aprecio. – mlienau

2

Enlace a un controlador, y puede alternar a voluntad. Disabled es un atributo bound, por lo que cuando la propiedad cambie, la plantilla se actualizará.

+0

Cuando lo enlace a un controlador obtengo algo como esto en el HTML ' 'Editar: agregó un [violín] (http://jsfiddle.net/RPWnX/) – mlienau

+1

Usted pone rutas de enlace en una propiedad separada que termina en 'Encuadernación', 'enlazado desactivado' en este caso. –

+0

Funciona ahora gracias! – mlienau

Cuestiones relacionadas