ノックアウト/ブリーズでプロジェクトを開発しています。
ノックアウトを強制的にオブザーバブルを変更済みとしてマークすることが可能かどうかを知りたいです (フォーカスがまだフィールドにある場合でも)。私の目的は、ユーザーが日付を変更し始めるたびに、それを保存できることをユーザーに通知することです (ボタンがすぐに表示されます)。たとえば、日付を含む入力フィールドがあります。ユーザーはこのフィールドで日付の編集を開始します。オブザーバブルは、ユーザーがフィールドのフォーカスを離れたときにのみ、新しくエンコードされた日付を解釈する必要があります。Save button
しかし、彼が入力フィールドに何かを入力し始めたらすぐに表示したいと思います。私がはっきりしていることを願っています。
入力の日付を編集するための bindingHandlers は次のとおりです。
ko.bindingHandlers.dateRW = {
//dateRW --> the 'read-write' version used both for displaying & updating dates
init: function (element, valueAccessor, allBindingsAccessor) {
var observable = valueAccessor();
var value = ko.utils.unwrapObservable(valueAccessor);
//handle the field changing
ko.utils.registerEventHandler(element, "change", function () {
var myDate = moment($(element).val(), "DD/MM/YYYY");
observable(myDate.toDate());
});
//ko.utils.registerEventHandler(element, "keyup", function () {
// As soon as user begin to type something, I would like to show my save button
//});
},
update: function (element, valueAccessor, allBindingsAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
var date = (typeof value !== 'undefined') ? moment(value) : null;
var dateFormatted = (date != null) ? date.format('DD/MM/YYYY') : '';
$(element).val(dateFormatted);
}
};
そして私の見解:
<input type="text" data-bind="dateRW: myDate" />
valueUpdate: 'afterkeydown'
カスタム bindingHandlers を使用しているため、残念ながら機能しません。
誰かが私を正しい方向に向けてくれることを願っています。
ありがとう。