我有自定义标记,可以将自己作为内部标记,我想将其props
绑定为data
。我可以更改第一个test
代码title
属性并查看更改但不能对内部test
代码执行此操作。我认为这是因为this.tagCtx.content.render()
的错误论点。以下是示例:
<!DOCTYPE html>
<html>
<head>
<script src="js/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="js/jsrender.js" type="text/javascript"></script>
<script src="js/jquery.observable.js" type="text/javascript"></script>
<script src="js/jquery.views.js" type="text/javascript"></script>
<script id="testTemplate" type="text/x-jsrender">
<div>{^{>title}}{^{:content}}</div>
</script>
<script id="myTemplate" type="text/x-jsrender">
{^{test title='Test1'}}
{^{test title='Test2'}}
{{/test}}
{{/test}}
</script>
<script type="text/javascript">
$.views.tags({
test: {
render: function(){
this.tagCtx.props.content = this.tagCtx.content.render();
return this.template.render(this.tagCtx.props, this.tagCtx, this.tagCtx.view);
},
template: "#testTemplate"
}
});
$.templates({myTemplate: "#myTemplate"});
$(function () {
$.link.myTemplate('#container', {});
$('#editTitle').click(function () {
$.observable($.view('#container div:first div').data).setProperty('title', prompt());
});
});
</script>
</head>
<body>
<span id="editTitle">EditTitle</span>
<div id="container"></div>
</body>
</html>
答案 0 :(得分:1)
这里的问题是内部标记被呈现为字符串,而不是数据链接标记,因为this.tagCtx.content.render()
调用只是在与块内容相对应的编译模板上调用render方法。
如果您想要呈现为数据链接标记,则需要调用this.tagCtx.render()
。
此外,在调用this.tagCtx.render()
时,您需要标记来呈现其内容,而不是另一个模板。设置template: "#testTemplate"
会导致代码使用该模板而不是内容。所以你需要的是这些方面:
var template = $.templates("#testTemplate");
$.views.tags({
test: {
render: function() {
var tagCtx = this.tagCtx;
tagCtx.props.content = tagCtx.render();
return template.render(tagCtx.props, undefined, tagCtx.view);
}
}
});
您可能不希望在template.render(...)
调用中将tagCtx作为上下文传递。您可以传入tagCtx.ctx,或者只是未定义...