Я работаю над некоторыми пользовательскими привязками, и в одной из них я хотел бы иметь возможность отображать таблицу из некоторых массивов строк.
скрипка
Я упростил его до этой пользовательской привязки:
ko.bindingHandlers.table = {
init: function tableBinding(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
element.innerHTML = tableTemplate;
var innerBindingContext = bindingContext.createChildContext(valueAccessor());
ko.applyBindingsToDescendants(innerBindingContext, element);
return {
controlsDescendantBindings: true
};
}
};
Это содержимое шаблона:
<!-- if: head && head.length -->
<thead>
<tr data-bind="foreach: head">
<th data-bind="text: $rawData">not working th</th>
</tr>
</thead>
<!-- /ko -->
<tbody data-bind="foreach: rows">
<tr data-bind="foreach: $data">
<td data-bind="text: $data">not working td</td>
</tr>
</tbody>
И несколько примерных данных.
ko.applyBindings({
table: {
head: ["Name", "Position"],
rows: [
["John", "Janitor"],
["Mike", "IT"],
["Paul", "HR"],
["Rick", "Coffee Fetcher"]
]
}
});
Я использую Knockout 3.0, однако все, что работает на Knockout 2.x, будет работать и здесь. Если вы посмотрите на скрипку, часть <thead>
отображается правильно, а привязки к телу — нет. Он отлично работает, если я встраиваю шаблон и использую привязку with
, например, with: table
.