現在、Extenderを使用してKnockout JSアプリケーションで自動保存機能を実装しようとしています。ユーザーがフィールドから抜けるときだけでなく、フィールドの入力をやめるときにオートセーブ機能を呼びたいと思います。タイムアウト後にKnockout JS Extender関数を呼び出す
これは、観測値が更新されたときに呼び出すlogChangeメソッドです。
//KO Extender for logging changes and calling the autosave function
ko.extenders.logChange = function (target, precision) {
//create a writable computed observable to intercept writes to our observable
var result = ko.pureComputed({
read: target, //always return the original observables value
write: function (newValue) {
debugger;
var current = target(),
valueToWrite = newValue,
attName = precision;
//only write if it changed
if (valueToWrite !== current) {
target(valueToWrite);
//self.autoSave(attName, target());
} else {
//if the rounded value is the same, but a different value was written, force a notification for the current field
if (newValue !== current) {
target.notifySubscribers(valueToWrite);
}
}
}
}).extend({ notify: 'always' });
//initialize with current value to make sure it is rounded appropriately
result(target());
//return the new computed observable
return result;
};
私はviewmodelでobservableを設定しています。
self.controlCenter = ko.observable().extend({ rateLimit: { timeout: 500, method: "notifyWhenChangesStop" }, logChange: "ControlCenter" });
そして、これはその観測可能
<div class="pure-u-1-2 pure-u-md-1-4 pure-u-lg-1-8">
<label for="ddlControlCenter">Jurisdiction</label>
<input type="text" class="pure-input-1 full-text" list="controlCenterList" data-bind="textInput: controlCenter" />
<datalist id="controlCenterList" data-bind="foreach: controlCenters">
<option data-bind="value: $data"></option>
</datalist>
</div>
のための私のHTMLマークアップでlogChangeメソッドが呼び出されますが、logChangeはキー操作ですぐに呼び出されるようレート制限が適用されているようにそれは見えません。
ここから右のコードを得ましたか。 http://knockoutjs.com/documentation/rateLimit-observable.html あなたのコードを取り出し、 'loggedValues'コードを追加して、それをあなたのcontrolCenters変数に変更しました。 rateLimitの遅延とともに、完全に動作します。 または、デバッガにすぐに当たると言っていますか? – Ray
はい、そのリンクは私がコードを入手した場所です。すぐにkeypressのlogChange関数でデバッガを押すので、私のオートセーブ関数も呼び出されます。ですから、コントロールセンターとして値 "DIABLO"を入力すると、 "D"、 "DI"、 "DIA"などを保存しようとします。私は、自動保存をratelimitの後に呼びたいと思います。 – Colin
すぐにデバッガにヒットしたとしても、ラティメーション後に呼び出されます。さて、私はあなたのコードの残りの部分と、デバッガを除いたものが含まれているコードを投稿します。やってみて。 – Ray