모든

2012-11-12 3 views
0

내가 솔루션을 사용하고 하나의 화재에 대한 모든 jQuery를 UI DatePicker에서와 KnockoutJS 변경 이벤트는 여기에서 찾을 :모든

jQuery UI datepicker change event not caught by KnockoutJS

내가 페이지에 날짜 선택기 컨트롤 수 있습니다. 하나가 변경되면 변경 이벤트가 모두 발생합니다.

RefreshData는 날짜 범위가 변경 될 때 ViewModel의 데이터를 새로 고치는 사용자 지정 함수입니다. 내가 실종 무엇

- 그것의 매우 실망 오후이 제대로 여기

작업을 진행하기 위해 노력하고 내 녹아웃 구속력 :

ko.bindingHandlers.datepicker = { 
init: function (element, valueAccessor, allBindingsAccessor) { 
    var options = allBindingsAccessor().datepickerOptions || {}; 
    $(element).datepicker(options); 

    ko.utils.registerEventHandler(element, "change", function() { 
     var observable = valueAccessor(); 
     observable($(element).datepicker("getDate")); 
    }); 

    ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
     $(element).datepicker("destroy"); 
    }); 

}, 
update: function (element, valueAccessor) { 
    var value = ko.utils.unwrapObservable(valueAccessor()); 
    var current = $(element).datepicker("getDate"); 

    if (value - current !== 0) { 
     $(element).datepicker("setDate", value); 
    } 

    RefreshData(element.id); //Should only fire once, but is firing for every datepicker on the page 
} 
}; 
+0

아마도 당신의 문제를 재현 할 수있는 jsfiddle을 넣을 수 있습니까? – nemesv

+0

흥미로운 것을 보았습니다 - 첫 번째 datapicker가 변경되면 update가 한 번 실행됩니다. 두 번째 datepicker가 변경되면 두 번 실행됩니다. –

+0

왜 'RefreshData'가 필요합니까? 이 기능의 본체를 제공 할 수 있습니까? –

답변

-1

확인 - 답을 발견했다. 내가 한 걸음 뒤로 물러서서 StackOverflow에서 다시 보았을 때 정말 분명했다. (그리고 나는 이것과 쌍을 이루고 있었다. 그래서 우리는 그것을 놓쳤다.)

업데이트 기능은 특정 요소가 아닌 datepicker에 대한 업데이트입니다. 내가 필요한 것은 다음과 같습니다 :

ko.bindingHandlers.datepicker = { 
init: function (element, valueAccessor, allBindingsAccessor) { 
    var options = allBindingsAccessor().datepickerOptions || {}; 
    $(element).datepicker(options); 

    ko.utils.registerEventHandler(element, "change", function() { 
     var observable = valueAccessor(); 
     observable($(element).datepicker("getDate")); 

     RefreshData(element.id); //This now fires only on the change event of the correct datepicker 
    }); 

    ko.utils.domNodeDisposal.addDisposeCallback(element, function() { 
     $(element).datepicker("destroy"); 
    }); 

}, 
update: function (element, valueAccessor) { 
    var value = ko.utils.unwrapObservable(valueAccessor()); 
    var current = $(element).datepicker("getDate"); 

    if (value - current !== 0) { 
     $(element).datepicker("setDate", value); 
    } 


} 
}; 
관련 문제