Ember Input を数値入力として拡張する新しいコンポーネントを作成したいと考えています。このクラスのユーザーが自分の値をnumber-input-component のvalue
プロパティにバインドする場合、数値 (または無効な値の場合は NaN) のみを取得する必要があります。Ember Input では、value に属性バインディングがあります。
次のように、 number-input-componentで「value」という名前の計算されたプロパティを定義しました。
value:Ember.computed({
get:function(key){
let htmlValue = this.get('htmlvalue');
return this.sanitize(htmlValue);
},
set:function (key, htmlvalue){
this.set('htmlvalue', htmlvalue);
if(this.get('onUpdate')) {
this.get('onUpdate')(this.sanitize(htmlvalue));
}
return this.sanitize(htmlvalue);
}
}),
期待どおりに機能しますが、双方向バインディングでは機能しません。(実際には DDAU では問題ありません。ただし、双方向バインディングでは機能するはずです。)
注:ユーザーが自分の値を「numericValue」にバインドできるように、「numericValue」(ここに表示) などの別のプロパティを提供できることはわかっています。しかし、ユーザーをvalueとnumericValueの両方で混同したくありません。
アップデート:
フィールドへの入力中は、タイプミスによって値がリセットされません。たとえば、ユーザーが「123456789」を書き込もうとして誤って「12345678p」を押しても、入力がリセットされることはありません。値が無効な場合、エラー メッセージを表示したり、値をリセットしたりすることは、コンポーネントの責任ではありません。
あなたが見ることができるフィドルがあります:Ember-Twiddle