Ci sono un certo numero di modi per fare questo genere di cose. Qui possiamo realizzare questo usando associazioni e osservatori.
Prima consente di creare una funzione che restituirà sempre un numero.
var onlyNumber = function(input) {
return input.toString().replace(/[^\d.]/g, "");
};
usando che possiamo fare le seguenti
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) Stiamo creando un legame alle età della persona, ma tutto ciò che passa attraverso questo legame può essere solo un numero. Vedi Ember.Binding da/per le trasformazioni per maggiori dettagli.
2) Stiamo osservando il valore del campo di testo e impostandolo come un numero solo quando cambia. Se l'utente immette "42a", verrà immediatamente impostato su "42". Si noti che anche se "42a" era inserito nel testo per un breve secondo, non sarebbe stato in grado di passare attraverso l'associazione a causa della nostra trasformazione.
Ecco un violino che mostra questo esempio: http://jsfiddle.net/nDBgC/
Se non ti piacciono i vecchi browser, puoi sfruttare anche il tipo di numero di input html5, come: {{visualizza Ember.TextField type = "number" valueBinding = "someBinding"}} – Rajat
@Rajat Cosa succederebbe con i vecchi browser? Funzionalità interrotta o semplicemente nessuna convalida? E cosa si considera "vecchio"? (Scusate, sono un noob in quest'area) –
Riporteranno semplicemente in un normale campo di testo. Sul supporto del browser, controlla quirksmode: http://www.quirksmode.org/html5/inputs.html – Rajat