この種のものを行うには、いくつかの方法があります。ここでは、バインディングとオブザーバを使用してこれを実現できます。
まず、常に数値を返す関数を作成します。
var onlyNumber = function(input) {
return input.toString().replace(/[^\d.]/g, "");
};
私たちは、次の
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)私たちは、人の年齢にバインド作成して行うことができます使用して、この結合を通過するものはわずか数とすることができます。詳細については、Ember.Bindingの変換から変換を参照してください。
2)テキストフィールドの値を観察していて、数値が変更されたときに値を設定しています。ユーザーが '42a'と入力すると、直ちに '42'に戻ります。たとえ "42a"が短時間のテキスト入力にあったとしても、変換のためにバインディングを通過することはできませんでした。ここ
は、この例を示すフィドルある:http://jsfiddle.net/nDBgC/
古いブラウザを気にしない場合は、html5の入力タイプ「番号」を利用することもできます。{{Ember。TextField type = "number" valueBinding = "someBinding"}} – Rajat
@Rajat古いブラウザではどうなりますか?機能が壊れているか、単に検証されていない?そして、何が「古い」と考えられていますか? (申し訳ありませんが、私はこの分野のノブです) –
彼らは単純に通常のテキストフィールドにフォールバックします。ブラウザのサポートでquirksmodeを確認してください:http://www.quirksmode.org/html5/inputs.html – Rajat