1

私は、可視性バインディングを持つことができるようになりたいというシナリオを持っています。そして、私はそれが仮想であることを望んでいます。

このフィドルは私の問題を解決しますが、それの bindgHandler が必要です。私が解決したい問題は、ブロック プロパティが true の場合、要素が HTML のスペースを占有する必要があり、必要のないものをレンダリングしたくないということです。

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

私はもちろん、これを行うことができるようになりたいです。

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

bindingHandler で私がすることはすべてです

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;
4

1 に答える 1

1

カスタムバインディングを仮想要素として使用できるようにするには、追加する必要があります

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

したがって、あなたの場合、あなたはやりたいと思うでしょう

ko.virtualElements.allowedBindings.visiblity = true;

を呼び出す前にコードに追加しますko.applyBindings()。詳細については、このドキュメントを参照してください。

于 2012-10-19T16:52:27.753 に答える