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');
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