所以,我只是试图将一个int转换为一个“if”语句中的bool。我不确定如何实现这一目标。我正在玩的代码如下。
HTML:
<div id="main-div"></div>
<script id="testTmpl" type="text/x-jsrender">
<input data-link="{:test:}" />
<div data-link="{intToBool:test:}"></div>
// testing different methods, none seem to work
{^{if intToBool:test }}
Woot! 1
{{/if}}
{^{if intToBool(test) }}
Woot! 2
{{/if}}
{^{if ~root.intToBool(test) }}
Woot! 3
{{/if}}
</script>
JavaScript:
$.views.converters({
intToBool: function(val) {
if (val === 0 || val === false || val === '0' || val === 'false') {
return false;
} else {
return true;
}
}
});
function App(data) {
self = this;
self.test = 0;
};
var app = new App();
var testTmpl = $.templates("#testTmpl");
testTmpl.link("#main-div", app);
答案 0 :(得分:2)
注册转换器仅适用于{{: ...}}
标记http://www.jsviews.com/#assigntag),其格式为{{cvt:expression}}
{^{cvt:expression}}
<div data-link="{cvt:expression}">
或<input data-link="{cvt:expression:cvtBack}" />
。请参阅http://www.jsviews.com/#converters。
对于其他方案,您需要使用方法{^{if someMethodOnMyModel(test)}}
或帮助程序(http://www.jsviews.com/#helpers):{^{if ~someHelper(test)}}
。
另请参阅http://www.jsviews.com/#samples/jsr/paths有关辅助函数或辅助对象的辅助路径示例 - ~some.expression...
。请注意,~root
是您传递到render()
或link()
的顶级数据对象的内置辅助路径。
编辑: 实际上 是JsRender和JsViews中一个鲜为人知的功能 让你将注册转换器与其他标签相关联你可以写
{^{if test convert="intToBool" }}
Woot!
{{/if}}
但通常使用~intToBool(test)
可能更简单/更好 - 这在阅读模板时更为熟悉,也许更容易理解。
同样BTW {{if test}}
测试'truthy'所以test
不需要是boolean类型。 OTOH如果你想做“假”,或者“0”是假的,那么你确实需要一个助手/转换器。