当我尝试传递具有数字属性的JavaScript对象
{ 1: "One", 2: "Two", 3: "Three" }
数据绑定不呈现属性值,仅呈现示例中的数字
$.templates("template", "#template");
$.link.template("#row", { 1: "One", 2: "Two", 3: "Three" });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>
<script id="template" type="text/x-jsrender">
<td>{{:1}}</td>
<td>{{:2}}</td>
<td>{{:3}}</td>
</script>
<table>
<tr id="row">
</tr>
</table>
但是如果我将对象的属性名称更改为以字母开头的名称,那就可以了
$.templates("template", "#template");
$.link.template("#row", { n1: "One", n2: "Two", n3: "Three" });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>
<script id="template" type="text/x-jsrender">
<td>{{:n1}}</td>
<td>{{:n2}}</td>
<td>{{:n3}}</td>
</script>
<table>
<tr id="row">
</tr>
</table>
是错误还是功能?如何使jsViews使用数字属性而不转换传递的对象?
答案 0 :(得分:2)
如果您为某个整数写{{:4}}
,则JsRender将其视为一个表达式,并对其求值。 (例如{{:4*12+2}}
将呈现50
)。
在JavaScript中,如果对象属性名称(键)不是有效的标识符名称,则必须使用方括号访问器语法。
在JsRender / JsViews模板中,同样如此。 (请参见www.jsviews.com/#paths)。
这里有多个示例:
$.templates("template", "#template");
$.link.template("#row",
{ 1: "One", "2": "Two", 3: "Three", other: { 50: "fifty" }, 4: { 5: "five"}, "a b": "AB" });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>
<script id="template" type="text/x-jsrender">
<td>{{:#data[1]}}</td>
<td>{{:#data[1+1]}}</td>
<td>{{:#data["3"]}}</td>
<td>{{:other[50]}}</td>
<td>{{:~root[1]}}</td>
<td>{{:#data[4]["5"]}}</td>
<td>{{:#data["a b"]}}</td>
</script>
<table>
<tr id="row">
</tr>
</table>
答案 1 :(得分:0)
请检查JSRender/JSView
在这里,如果您看到最后一部分示例:{{:#index ...}} ,它使用json对象的索引,并且当您将数字用作json对象的键并尝试映射它时,也会发生同样的情况在模板中,因此将其视为索引而不是键。
更好地使用一些带有数字的静态字母,例如key1,key2等。
$.templates("template", "#template");
$.link.template("#row", {key1: "One", key2: "Two", key3: "Three" });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>
<script id="template" type="text/x-jsrender">
<td>{{:key1}}</td>
<td>{{:key2}}</td>
<td>{{:key3}}</td>
</script>
<table>
<tr id="row">
</tr>
</table>
答案 2 :(得分:-1)
我认为您应该像下面那样使用字符串。
{ "1": "One", "2": "Two", "3": "Three" }