在页面加载后使用jQuery渲染挖空模板

时间:2013-06-10 10:47:51

标签: jquery jquery-plugins knockout.js knockout-templating

我正在构建一个knockout \ jQuery插件,在调用时创建自己的UI,如下所示:

<input type="text" name="filter" id="filter" />

// renders ui
$("#filter").myPlugin();

通常的jQuery东西。但是,作为行为的一部分,我希望利用淘汰模板。看来敲门声只识别首次加载时页面中的模板。

这是一个显示问题的简明示例:

<div id="container">
    <div data-bind="template: { name: 'fieldsTemplate', foreach: FilterRows() }">
    </div>
</div>

和js:

var fieldstemplate = $('<script>', { type: "text/html", id:"fieldsTemplate" });
var row = $('<ol>').html("<li>row</li>").appendTo(fieldstemplate);

fieldstemplate.insertAfter($("#container"));

var model = { FilterRows: ko.observable(["row"]) };
ko.applyBindings(model);

这会产生以下错误:

Uncaught TypeError: Cannot read property 'length' of null knockout-2.2.1.js:8

我还在这里创建了一个问题的JS小提琴:http://jsfiddle.net/roysvork/EcFRc/

基本上我想知道我是否需要在这里采取另一种方法,或者是否有一种方法可以“解析”dom以刷新模板的击倒知识?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以覆盖模板源引擎。您可以覆盖默认模板源,也可以编写自定义模板绑定,并仅覆盖该绑定的模板源。

要设置默认模板引擎,您可以查看我已完成的此插件

https://github.com/AndersMalmgren/Knockout.Bootstrap/blob/master/src/Knockout.Bootstrap.js#L27

要从自定义模板bindng覆盖模板源,您可以执行

ko.renderTemplate(template, bindingContext.createChildContext(data), engine /* reference your template engine */, element, "replaceChildren");