2012-10-19 5 views
1

나는 가시성 바인딩을 가지고 있기를 원하는 시나리오가 있습니다. 그리고 가상으로하고 싶습니다.가상 사용자 정의 바인딩

이 피들은 내 문제를 해결하지만 bindgHandler를 원합니다. 해결하려는 문제는 블록 속성이 true이면 elemnt가 HTML의 공간을 차지해야하며 unnessesery를 렌더링하지 않아야한다는 것입니다.

http://jsfiddle.net/7ENpC/1/

나는 당연히이 나 좋네요을 할 아벨되고 싶어요. bindingHander 내가하는 모든 일에서

<!-- ko foreach: allRows --> 
<!-- ko visibility: $data--> 
<div> 
    <span data-bind="text:text"></span> 
</div> 
<!-- /ko --> 
<!-- /ko --> 

if(block) 
    $element.css("visibility","hidden"); 
else 
    $element.css("visibility","visible"); 

이다 나는 그것이 바로 ... 누군가가 올바른 방향으로 날 도와주세요 수 위선적 인 말투.

ko.bindingHandlers.visibility = { 
init: function (element, valueAccessor, allBindingsAccessor, viewModel) { 

}, 
update: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
       var child = ko.virtualElements.firstChild(element), 

     var visible = valueAccessor().visible(); 
     var block= valueAccessor().block(); 

    if (!block||!visible) { 
     //call the general if binding ? 

    } else { 
     //Add visibility:hidden class 
    } 

} 
}; 
ko.virtualElements.allowedBindings.visibility = true; 
+0

http://jsfiddle.net/7ENpC/2/는 공간을 차지 dosnt. – user1199595

답변

1

당신이 당신의 경우에, 그래서

ko.virtualElements.allowedBindings.<your custom binding name here> = true; 

를 추가 할 필요가 가상 요소로 사용할 수있게하는 사용자 지정 바인딩을 만들려면, 당신은에

ko.virtualElements.allowedBindings.visiblity = true; 

을 수행 할 것 ko.applyBindings()에 전화하기 전에 코드를 작성하십시오. 자세한 내용은 this documentation을 참조하십시오. 더 나은 그 number5을 표시하도록 업데이트

+0

예. 나는 그것을 시도했습니다. 그러나 내가 어떻게 첫 번째 요소를 얻어야하는지 알지 못한다. 가상 및 가상 모두에서 작동하도록하십시오. – user1199595

관련 문제