如何访问自定义销毁绑定中的变量
How to access variables inside custom knockout binding
所以我使用这个日期选择器库。http://eonasdan.github.io/bootstrap-datetimepicker/Installing/淘汰赛
是否有一种方法可以让我从处理程序中获取值并将其保存在视图模型中?我想在视图模型的处理程序外部公开var picker = $(element).data('DateTimePicker');
的值。这可能吗?
/*globals Hilary*/
Hilary.scope('learn').register({
name: 'DatetimeVM',
dependencies: ['ko', 'jQuery', 'moment', 'OptionSelectVM'],
factory: function (ko, $, moment, OptionSelectVM) {
'use strict';
return function (date) {
var self = {
date: {
type: ko.observable(),
start: ko.observable(),
end: ko.observable()
}
};
if(!ko.bindingHandlers.dateTimePicker) {
ko.bindingHandlers.dateTimePicker = {
init: function (element, valueAccessor, allBindingsAccessor) {
//initialize datepicker with some optional options
var viewOptions = allBindingsAccessor().dateTimePickerOptions || {},
options;
options = $.extend({
inline: true,
debug: true
}, viewOptions);
$(element).datetimepicker(options);
//when a user changes the date, update the view model
ko.utils.registerEventHandler(element, 'dp.change', function (event) {
var value = valueAccessor();
if (ko.isObservable(value)) {
if (event.date !== null && !(event.date instanceof Date)) {
value(event.date.toDate());
} else {
value(event.date);
}
}
});
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
var picker = $(element).data('DateTimePicker');
if (picker) {
picker.destroy();
}
});
},
update: function (element, valueAccessor) {
var picker = $(element).data('DateTimePicker');
//when the view model is updated, update the widget
if (picker) {
var koDate = ko.utils.unwrapObservable(valueAccessor());
//in case return from server datetime i am get in this form for example /Date(93989393)/ then fomat this
// koDate = (typeof (koDate) !== 'object') ? new Date(parseFloat(koDate.replace(/[^0-9]/g, ''))) : koDate
picker.date(koDate);
}
}
};
}
return self;
};
}
});
你可以!查看自定义绑定文档,传递给绑定处理程序的init
和update
函数的参数比当前使用的要多,包括用于Knockout 3之前的第四个称为viewModel
的参数。x, bindingContext
为3。x版本。
从提到的文档:
但是要注意,这会从你的处理程序到特定的视图模型创建一个依赖,这通常是一个危险信号。显式地传递当前视图模型上的可观察对象或回调,绑定处理程序应该知道这些可能会更好,所以你可以这样写:
viewModel
-该参数在Knockout 3.x中已弃用。使用bindingContext.$data
或bindingContext.$rawData
来访问视图模型。bindingContext
-一个对象,用于保存该元素的绑定可用的绑定上下文。该对象包含$parent
、$parents
和$root
等特殊属性,可用于访问与此上下文的祖先绑定的数据。
<div data-bind="datepicker: { date: myDate, additionalData: someObservable }"></div>
相关文章:
- 用独立变量敲除foreach绑定
- 如果快速切换,ng类在绑定变量上不能很好地工作,这可能吗
- AngularJS$作用域包括我的绑定变量,但以后仍然无法访问,为什么
- AngularJS是交叉绑定变量
- Angular2:如何在输入元素上动态设置数据绑定变量
- 在 AngularJS 中使用绑定变量调用控制器方法
- AngularJS绑定变量超出范围并通知更新
- 如何在jquery ajax模板中添加两个不同的绑定变量(如${amount}和${tax})的值
- Oracle Node js - Javascript - SQL 语句中的 IN 子句绑定变量
- Javascript 如何绑定变量
- Angularjs中绑定变量的字符串
- 将字符串组合到Ember.js中的绑定变量中
- 如何在 ng-repeat (Angular JS) 的过滤器中使用数据绑定变量
- 当绑定变量改变时,Angularjs选择不更新
- Angularjs为HTML标签属性分配绑定变量
- 引导进度条样式的宽度在angular js绑定变量中不起作用
- 与Jquery对象绑定变量的问题
- 无法将变量/ng-model绑定变量作为参数传递给$scope工厂函数
- 以指令为内容的Angular JS绑定变量
- 调试:获取函数内部绑定变量的内容