KnockoutJS에서 '조건부 클릭'바인딩을 만들고 싶습니다. 기본적으로 Knockout에서 사용하는 것처럼 표준 클릭 바인딩이지만 첨부 된 함수를 실행하려면 조건을 충족해야합니다. 필자의 경우 가장 좋은 방법은 사용자 정의 바인딩 핸들러를 작성하여 허용되는 경우 표준 클릭 바인딩을 호출하는 것입니다.표준 호출 맞춤 바인딩에서 녹아웃 클릭 바인딩
ko.bindingHandlers.safeClick = {
'init': function(element, valueAccessor, allBindingsAccessor, context) {
$(element).click(function() {
if(mycondition == true) {
// call the standard click binding here -> this is the part I don't know
}
});
}
}
내 모든 표준 클릭 바인딩을이 사용자 지정 바인딩으로 바꾸려고합니다. 따라서 올바른 방식으로 클릭 바인딩을 호출하는 것이 중요하므로 HTML에 제공된 모든 매개 변수가 함수로 전달됩니다. 예를 들어 사용자 지정 바인딩에서 누락 된 부분 좀 도와 수 있다면
<a href="#" data-bind="click: basevm.gotopage.bind($data, '#homepage')">Home</a>
<a href="#" data-bind="click: itemvm.activateItem">Activate</a>
이 나는 대단히 감사하겠습니다
<a href="#" data-bind="safeClick: basevm.gotopage.bind($data, '#homepage')">Home</a>
<a href="#" data-bind="safeClick: itemvm.activateItem">Activate</a>
로 대체해야합니다.
ko.bindingHandlers.click.init(element, valueAccessor, allBindingsAccessor, context);
편집 :
이 메서드는 조건을 HTML 코드에서 녹아웃 관측 가능으로 전달한다고 가정합니다. 나는 이것을 원하지 않는다. 대신 요소를 클릭 할 때마다 JavaScript 코드에서 조건을 수동으로 확인하려고합니다. 그 일을하는 방법에 대한 조언이 있습니까? –
'if (ko.utils.unwrapObservable (allBindingsAccessor(). 조건))'대신 원하는 것을 쓸 수 있습니다. 링크를 클릭 할 때마다 평가됩니다. 나는 단지 나의 데모 jsfiddle에서 관찰 할 수있는 조건을 필요로했다. 이 수정 된 바이올린을 참조하십시오 : http://jsfiddle.net/w7nKB/2/ – nemesv
정상적인 클릭 바인딩과이 사용자 정의 바인딩 사이의 문제를 설명하기 위해이 피들 (http://jsfiddle.net/Ed8Fc/)을 만들었습니다. 클릭 이벤트를 발생시킨 DOM 요소에 대한 액세스 권한이 있어야합니다. 정상적인 클릭 바인딩을 사용하면 OK이지만 safeClick 바인딩을 사용하면 브라우저 콘솔에 오류가보고됩니다. –