emberjs ember create component bubbling ember.js

ember.js - create - ember onclick



Emberjs-Desactiva y habilita TextField (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á.

Así que recientemente encontré 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.

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?


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

Convenio de denominación

Antes que nada, debería echar un vistazo a la publicación de Emberist sobre las convenciones de nombres : las clases deben llamarse UpperCase e las instancias lowerCase, excepción para aplicaciones y espacios de nombres. Entonces en su JSFiddle provisto en su comentario es App.controller y App.ATextField .

Declarando la aplicación como variable global

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

Vinculaciones

Los enlaces deberían declararse en instancias y no en clases. Con esto quiero decir que no definirías el valueBinding de valueBinding de tu App.TextField en la definición de tu clase, sino que lo App.TextField a la instancia concreta, por ejemplo, en la plantilla.

En su JSFiddle proporcionado en su comentario, su enlace al controlador no funciona porque no usa uno: para crear un enlace a un controlador / objeto específico / ... tendrá que declarar el nombre de propiedad que desea vincular y anexar una Cadena de Binding . Por lo tanto, sería disabledBinding: ''App.controller.shouldDisable'' .

Ejemplo

Refactoreé tu código, mira http://jsfiddle.net/pangratz666/pLpKV/ :

Manubrios :

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