【发布时间】:2013-08-20 21:39:58
【问题描述】:
我正在尝试使用敲除创建一个页面,该模型包含一个可观察数组。每个数组项中的属性之一是日期,我正在尝试使用 jquery ui datepicker。
我在this question 中找到了日期选择器的自定义绑定处理程序示例。但是,当我尝试在我的代码中使用它时,我在更改事件处理程序期间收到了一个 javascript 错误。
我的简化代码:
<table>
<thead>
<tr>
<th>My Date</th>
</tr>
</thead>
<tbody data-bind='foreach: visits'>
<tr>
<td><input data-bind='datepicker: MyDate' /></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
ko.bindingHandlers.datepicker = {
init: function(element, valueAccessor, allBindingsAccessor) {
$(element).datepicker({ dateFormat: 'dd/mm/yy' });
//handle the field changing
ko.utils.registerEventHandler(element, "change", function() {
//get the value accessor
var observable = valueAccessor();
//assign the observable value - code breaks here with 'Function expected'
observable($(element).datepicker("getDate"));
});
//handle disposal (if KO removes by the template binding)-
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
$(element).datepicker("destroy");
});
},
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
//handle date data coming via json from Microsoft
if (String(value).indexOf('/Date(') == 0) {
value = new Date(parseInt(value.replace(/\/Date\((.*?)\)\//gi, "$1")));
}
var current = $(element).datepicker("getDate");
if (value - current !== 0) {
$(element).datepicker("setDate", value);
}
}
};
var VisitModel = function(visits) {
var self = this;
self.visits = ko.observableArray(visits);
self.getVisitsJSON = function() {
return ko.utils.stringifyJson(self.visits);
}
};
var visitModel = new VisitModel([{"MyDate":"01/01/2013"}]);
ko.applyBindings(visitModel);
</script>
在我的代码中的 cmets 中,当我调用 observable($(element).datepicker("getDate")); 时,我收到一条错误消息“预期功能”。我对 knockoutjs 很陌生,我不知道为什么会出现这个错误,有人可以帮忙解释一下吗?
【问题讨论】:
-
但是我链接的另一个问题是使用该行的代码回答的,您可以在 jsfiddle.net/rniemeyer/NAgNV 看到它的工作原理
-
问题是,虽然您的数组是
observableArray,但其中的元素不是。您绑定的值只是一个普通的 javascript 对象。
标签: javascript jquery jquery-ui knockout.js jquery-ui-datepicker