Виртуальная пользовательская привязка

У меня есть сценарий, где я хочу быть abel, чтобы иметь привязку видимости. И я хочу, чтобы это было виртуальным.

Эта скрипка решает мою проблему, но я хочу ее связать. Проблема, которую я хочу решить, состоит в том, что если свойство блока имеет значение true, элемент должен занимать место в HTML, и я не хочу показывать ненужные вещи.

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

Я хочу быть abel, чтобы сделать это или лучше конечно.

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

1 ответ

Чтобы сделать пользовательскую привязку пригодной для использования в качестве виртуального элемента, необходимо добавить

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

Итак, в вашем случае вы хотели бы сделать

ko.virtualElements.allowedBindings.visiblity = true;

в свой код, прежде чем позвонить ko.applyBindings(), Смотрите эту документацию для получения дополнительной информации.

Другие вопросы по тегам