我在使用带有自定义模板绑定的 knockoutjs 时遇到问题。
假设我有一个这样的 HTML 正文:
<div id="1">
<div data-bind="template:{name: '2', data: data}"></div>
</div>
<div id="2">
<h3 data-bind="text: caption"></h3>
</div>
JS 代码如下所示:
var ViewModel2 = function () {
this.caption = ko.observable("Caption");
}
var ViewModel1 = function () {
this.data = new ViewModel2();
}
ko.applyBindings(new ViewModel1(), document.getElementById("1"));
如果我们测试这段代码,一切都会正常工作;
请参阅 JSFiddle 示例:http: //jsfiddle.net/4eTWW/33/
现在假设我们要进行自定义模板绑定。我们将使用“templatex”绑定而不是“template”。
在 HTML 中,我们只需要更改一行:
<div data-bind="templatex:{name: '2', data: data}"></div>
接下来,让我们为 JS 添加自定义模板绑定:
/*Custom binding*/
ko.bindingHandlers.templatex = {
init: function (element) {
ko.bindingHandlers.template.init.apply(this, arguments);
},
update: ko.bindingHandlers.template.update
}
见:http: //jsfiddle.net/4eTWW/35/
但在这种情况下,我们有一个错误,说它在模型中找不到“标题”。
现在让我们将模板 {} 添加到 html 绑定:
<div data-bind="template: {}, templatex:{name: '2', data: data}"></div>
见:http: //jsfiddle.net/4eTWW/36/
现在一切正常。
似乎在绑定父 div 时,它无法确定子 div 是模板。
那么如何在我的自定义模板活页夹中将其标记为模板呢?
谢谢。