我找不到任何可行的解决方案来解决我的问题,但是我知道这可能是让它运转起来的一种微不足道的方法,但我无法弄清楚。
我有一个名为liveEditor的扩展器,它在显示文本和用户可以输入值的输入之间切换。它适用于输入和textareas,但我无法使用ie datepicker来管理它。
这是我的代码
HTML:
<div data-bind="liveEditor: Date">
<span class="view" data-bind="text: Date, event: {click: Date.edit}">15.04.2016</span>
<span data-bind="event: { click: Date.stopEditing }" class="ok"></span>
<input value="15.04.2016" data-bind="datetime: Date, event: {blur: Date.stopEditing}" />
</div>
JS:
ko.extenders.liveEditor = function (target) {
target.editing = ko.observable(false);
target.edit = function () {
target.editing(true);
};
target.stopEditing = function () {
target.editing(false);
//save
this.saveModel(); //run a method on viewmodel
};
return target;
};
ko.bindingHandlers.datetime = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext){
var value = valueAccessor();
var $el = $(element);
if (ko.isObservable( value )){
$el.data('kendoDatePicker').on('close', function(e,dataItem){
// what should I write here to call a stopEditing method?
});
}
}
};
单击OK按钮时可以正常工作。
提前感谢您的帮助!
答案 0 :(得分:1)
我应该在这里写什么来调用stopEditing方法?
可以从valueAccessor()
获得可观察量,所以:
valueAccessor().stopEditing();
这将在事件发生时访问它。如果您在调用init
时使用该值时非常重要,那么您将关注avlue
中的值,因此它将是value.stopEditing()
。< / p>
另外两种选择(但我想我会做上述事情):
events
访问allBindings
绑定,然后获取其blur
绑定并将其调用blur
input
个活动