次のような「Weight」の観測可能な配列を含むノックアウトビューモデルがあります
var Weight = function(item){
var self = this;
self.weight = ko.observable(item);
self.lbs = ko.computed({
read: function () {
return Math.floor(self.weight() / ozInLbs);
},
write: function (newValue) {
self.weight((((newValue * ozInLbs) + parseFloat(self.oz())).toFixed(3)*1000)/1000);
},
owner: self
});
self.oz = ko.computed({
read: function () {
return ((self.weight() - self.lbs() * ozInLbs).toFixed(3)*1000)/1000;
},
write: function (newValue) {
self.weight(((newValue + (self.lbs() * ozInLbs)).toFixed(3)*1000)/1000);
},
owner: self
});
}
次のhtml付き
<table>
<thead>
<tr>
<td>lbs</td>
<td>oz</td>
</tr>
</thead>
<tbody data-bind="foreach: weights">
<tr>
<td><input type="text" data-bind="spinner:lbs" /></td>
<td><input type="text" data-bind="spinner:oz" /></td>
</tr>
アイデアは、スピナーでオンスを増やすと(16オンスがヒットすると)ポンドが1増加し、オンスがゼロに戻るというものです。これは次のjsfiddleで機能しています:http://jsfiddle.net/ajwaka/Ps36B/
さて、これらは本質的にテキスト入力であるため、ユーザーが1.25ポンドを追加できるようにし、入力をLBS-1およびOZ=4に自動的に更新するようにします。
問題は、1.2に達するとすぐにすべてが自動的に更新され、Lbs=1およびOz=3になります。ユーザーが値1.25を入力したときに、これを1/2秒遅らせるにはどうすればよいですか。 lbs=1およびoz=4?
明確にするために-スピナーを使用しているときに即時更新が行われるようにしたい-しかし、ユーザーがキーパッド/キーボードを介して値を入力している場合は、ユーザー入力を遅らせます。