我想通过knockout创建一个通用的表组件。如果有一个参数'templ',这个组件必须支持自定义模板显示:
tableParams = {
...
{
title: 'factory', name: "FAC_NO", isKey: true,
templ: '<span style="color:red" data-bind="text:FAC_NO"></span>',
validation: {
required: true,
maxLength: 4
}
}
...
我想通过字符串而不是<script type="text/html"...
来支持模板。但是knockout.js不支持吗?
现在我写了一个绑定:
ko.bindingHandlers.templ = {
'init': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var setting = valueAccessor();
var compile = function (html) {
var cell = $(html);
ko.applyBindings(setting.data, cell[0]);
$(element).html(cell);
};
compile(setting.tpl);
return { controlsDescendantBindings: true };
}
};
并在我的表组件中使用单元格渲染:
<!-- ko if:$data.templ -->
<td data-bind="templ:{ tpl: $data.templ, data: $parentContext.$data }"></td>
<!-- /ko -->
看起来很有效。但还有更好的方法吗?我的自定义绑定是正确的(有资源泄漏)?