datepicker をカスタマイズして拡張しようとしています。まず、Binder を customValue で拡張しました。
kendo.data.binders.widget.customValue = kendo.data.Binder.extend({
init: function (element, bindings, options) {
kendo.data.Binder.fn.init.call(this, element, bindings, options);
},
refresh: function(e){
var path = this.bindings.customValue.path,
source = this.bindings.customValue.source,
value = source.get(path);
this.element.value(value);
},
change: function(e){
// this method is not triggered
debugger;
}
});
次に、DatePicker ウィジェットを拡張しました。
CustomDatePicker = kendo.ui.DatePicker.extend({
init: function(element, options) {
kendo.ui.DatePicker.prototype.init.call(this, element, options);
this.bind('change', this.onChange);
},
options: {
name: "CustomDatePicker",
},
onChange: function(e){
debugger;
},
});
kendo.ui.plugin(CustomDatePicker);
カスタム バインダーのメソッド 'refresh' は、ビュー モデルが変更されるとトリガーされるため、ビュー モデルからウィジェットにデータを流すことができます。それはうまくいきます。しかし、ウィジェットからビューモデル (逆フロー) へのバインドに問題があります。最初は、datepicker の変更が「customValue」バインダーの「change」メソッドをトリガーすると思っていましたが、そうではありません。CustomDatePicker.onChange メソッドがトリガーされますが、その中で view-model がスコープ外であるため、view-model を設定できません。私の質問は、ウィジェットの値が変更されたときにビューモデルを更新する方法ですか? アドバイスありがとう。
イラストウィジェットのみが次のように初期化されます。
<input
data-role="datepickercustom"
data-bind="customValue: data"
data-format="dd.MM.yyyy" />