自定义绑定处理程序,从字符串模板渲染绑定

时间:2012-05-31 13:29:54

标签: knockout.js ko-custom-binding

我使用应该是可选的行模板进行自定义绑定。如果用户没有提供模板ID,我想使用默认值,但它不存在于body中的script标签中,它只是options literal上的一个字符串。

如何使用字符串作为模板?

默认模板应该非常简单

<span data-bind="text: name"></span>

我已经尝试过ko.renderTemplate,但它只将id用于脚本标记

ko.renderTemplate(template, bindingContext.createChildContext(data), null, row, "replaceChildren");

更新 刚收到有关此问题的通知,并看到有人建议将模板注入dom并使用标准脚本标记提供程序。但是这并没有考虑到用户可以覆盖默认模板源(使用单个plage应用程序的常见方案。我使用这种方式,首先尝试默认模板提供程序,然后回退到字符串模板源,如此

var engines: {}
var renderTemplate = function (element, template, data, bindingContext) {
    var engine = engines[template];

    var success = false;
    do {
        try {
            ko.renderTemplate(template, bindingContext.createChildContext(data), engine, element, "replaceChildren");
            success = true;
            engines[template] = engine;
        } catch(err) {
            if (engine != null)
                throw "Template engine not found";

            engine = { templateEngine: stringTemplateEngine };
        }

    } while (!success)
};

可在此处找到完整代码和stringTemplateEngine代码 https://github.com/AndersMalmgren/Knockout.Combobox/blob/master/src/knockout.combobox.js#L297

1 个答案:

答案 0 :(得分:3)

要从字符串呈现模板,您需要按照here.

所述编写自定义模板源

希望这有帮助。