所以,我只是想在“if”语句中将 int 转换为 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);
最佳答案
注册转换器仅用于 {{: ...}}
标签 ( 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)
可能更简单/更好- 更熟悉,在阅读模板时可能更容易理解。
顺便说一句 {{if test}}
测试 'truthy' 所以 test
不需要是 bool 类型。 OTOH 如果你想让“假”或“0”是假的,那么你确实需要一个助手/转换器。
关于javascript - 如何在 jsview if 语句中使用转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432317/