datepicker APIを使用してフィールドに日付を設定するカスタムバインディングを作成し、日付を正しく読み取ることによってobservableの値を設定することもできます。
カスタムバインディングは、次のようになります。
<input data-bind="datepicker: myDate, datepickerOptions: { minDate: new Date() }" />
datepickeroptions
はオプションとなり、あなたがdatepicker()
呼び出しに渡したいものを含めることができます:あなたが好きな、それを使用することになり
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
var options = allBindingsAccessor().datepickerOptions || {},
$el = $(element);
//initialize datepicker with some optional options
$el.datepicker(options);
//handle the field changing
ko.utils.registerEventHandler(element, "change", function() {
var observable = valueAccessor();
observable($el.datepicker("getDate"));
});
//handle disposal (if KO removes by the template binding)
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$el.datepicker("destroy");
});
},
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor()),
$el = $(element),
current = $el.datepicker("getDate");
if (value - current !== 0) {
$el.datepicker("setDate", value);
}
}
};
。
また、これは、あなたが日付の観測値を使用していることを前提としています。あなたが観測不可能な一方向バインディングをしたいのであれば、バインディングはもう少し作業をしなければなりませんが、それは起こりそうもありません。ここ
サンプル:http://jsfiddle.net/rniemeyer/NAgNV/
datepickerと "with:submodelObject"スタイルバインディングの連携を強化するには、このカスタムバインディングをどのように変更する必要がありますか?私の使用では、表示されたに接続できるまで、datepickerのdivが表示されるように表示されました。 "template:{afterRender:jqueryDecoratingMethod、data:submodelObject}"を使用するとうまくいきました。 –
@TetsujinnoOniあなたは問題を抱えているサンプルを持っていますか?見ていただければ幸いです。 –
Ryan - オファーに感謝します。私はフィドルで再現することができません。私は(ページ上の他の醜さのために)私がテーマjqueryuiを忘れてしまった、あるいは私のCSSで同じように醜いことが起こっていると思われます。私はそれを特定の要素の組み合わせに絞り込むことができますリンクやフィドル –