knockout을 사용하여 페이지를 만들려고하는데 모델에 관찰 가능한 배열이 포함되어 있습니다. 각 배열 항목의 속성 중 하나는 날짜이며 jquery ui datepicker를 사용하려고합니다.관찰 가능한 배열의 KnockoutJS datetime picker
datepicker에 대한 custom bindingHandler의 예가 this question입니다. 그러나, 내 코드에서 사용하려고하면 변경 이벤트 처리기 동안 자바 스크립트 오류가 발생합니다.
내 간단한 코드 : 내 코드의 주석에서와 마찬가지로
<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>
, 나는 observable($(element).datepicker("getDate"));
를 호출 할 때 오류가 '예상 기능'을 말하는 얻을. 나는 knockoutjs에 상당히 익숙하며 왜 나는이 오류가 발생하는지 확신 할 수 없다.
하지만 내가 링크 한 다른 질문은 정확히 그 라인을 사용하는 코드로 대답했다. http://jsfiddle.net/rniemeyer/NAgNV/에서 작업하는 것을 볼 수있다. – user1573618
문제는 배열이 'observableArray' 인 동안 그 안에있는 요소는 그렇지 않습니다. 바인딩 한 값은 단순한 자바 스크립트 객체입니다. –