2014-04-08 1 views
2

내가 현재 가지고 이런 식으로 뭔가를 찾고 내 모든 라벨 :사용자 정의 바인딩 내에서 기존의 녹아웃 바인딩을 설정할 수 있습니까?

<label data-bind="css: { notdone: FirstName.isModified() && !FirstName.isValid(), 
     done: FirstName.isModified() && FirstName.isValid() }">FirstName</label> 

내가 밖으로 추출하는 사용자 지정 바인딩을 만들 싶습니다 바인딩 CSS를 재 구현하지 않고 레이블에서 중복.

내 맞춤 바인딩 내에서 CSS 바인딩을 사용할 수 있습니까?

위해 다음 나는 바퀴를 개혁 할 것입니다하지 않으면 지금처럼 일부 중복 제거하기 :

ko.bindingHandlers.validationLabel = 
{ 
    update: (element, valueAccessor) => 
    { 
     var value = valueAccessor(); 
     var isModified = value.isModified(); 
     var isValid = value.isValid(); 

     $(element).removeClass("done notdone"); 

     if (!isModified) 
      return; 

     $(element).addClass(isValid ? "done" : "notdone"); 
    } 
} 
+1

게시물을 읽은 후, 나는 [템플릿] (http://knockoutjs.com/documentation/template-binding.html)을 사용하여 레이블에 기대고있었습니다. 'FirstName'은 관찰 가능하다고 가정하고, 템플릿에 사용할 레이블과 함께 전달하고 css 바인딩의 동적 클래스 버전을 사용합니다. [바이올린] (http://jsfiddle.net/origineil/eDLKB/)을보십시오. – Origineil

답변

2

당신은 당신의 자신의 내에서 바인딩에 내장를 호출 할 수 있습니다. 자세한 내용과

ko.bindingHandlers.css.update(element, function() { 
    return { done: isValid, notdone: !isValid } 
}); 

관련 질문 : 이런 식으로 뭔가는 jQuery 코드를 대체하기 위해 업데이트 방법에 작동합니다 Can I create a custom binding that uses other bindings in knockout.js

1

올바른 접근 방식은 ko.applyBindingsToNode

var notValid = ko.computed(function() { 
    return !isValid(); 
}); 
ko.applyBindingsToNode(element, { done: isValid, notdone: notValid }); 

이 방법을 사용하는 것입니다 update 메소드를 호출하는 것이 아니라 바인딩을 올바르게 연결합니다. 사용자 정의 바인딩의 init 함수에서 호출해야합니다. 각 업데이트가 아님

관련 문제