从字符串敲出模板必须创建自定义绑定?

时间:2018-05-14 05:45:48

标签: javascript knockout.js

我想通过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 -->

看起来很有效。但还有更好的方法吗?我的自定义绑定是正确的(有资源泄漏)?

0 个答案:

没有答案