Hay un número de maneras de hacer este tipo de cosas. Aquí podemos lograr esto usando enlaces y observadores.
Primero permitamos crear una función que siempre devolverá un número.
var onlyNumber = function(input) {
return input.toString().replace(/[^\d.]/g, "");
};
usando lo que podemos hacer la siguiente
App = Ember.Application.create();
App.person = Ember.Object.create({
age: 42
});
App.NumberField = Ember.TextField.extend({
valueBinding: Ember.Binding.from("App.person.age").transform(onlyNumber),
_cleanValue: function() {
this.set('value', onlyNumber(this.get('value')));
}.observes('value')
});
1) Estamos creando una unión a la edad de la persona, pero cualquier cosa que pasa a través de esta unión sólo puede ser un número. Ver Ember.Binding para/desde transformaciones para más detalles.
2) Estamos observando el valor del campo de texto y configurándolo como un número cuando cambia. Si el usuario ingresa '42a', lo restableceremos inmediatamente a '42'. Tenga en cuenta que, aunque '42a' estuvo en la entrada de texto por un breve segundo, no habría podido pasar a través del enlace debido a nuestra transformación.
Aquí es un violín que muestra este ejemplo: http://jsfiddle.net/nDBgC/
Si no te importan los navegadores antiguos, puedes aprovechar el tipo de entrada html5 "number" también, como: {{view Ember.TextField type = "number" valueBinding = "someBinding"}} – Rajat
@Rajat Entonces, ¿qué pasaría con los navegadores antiguos? ¿Funcionalidad rota o simplemente sin validación? ¿Y qué se considera "viejo"? (Lo siento, soy un novato en esta área) –
Simplemente recurrirán a un campo de texto normal. En el soporte del navegador, compruebe el modo peculiar: http://www.quirksmode.org/html5/inputs.html – Rajat