Виртуальная пользовательская привязка
У меня есть сценарий, где я хочу быть abel, чтобы иметь привязку видимости. И я хочу, чтобы это было виртуальным.
Эта скрипка решает мою проблему, но я хочу ее связать. Проблема, которую я хочу решить, состоит в том, что если свойство блока имеет значение true, элемент должен занимать место в HTML, и я не хочу показывать ненужные вещи.
Я хочу быть 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()
, Смотрите эту документацию для получения дополнительной информации.