Con*_*wer 1 backbone.js underscore.js
我正在使用下划线模板引擎(作为 Backbone.js 的一部分),并且遇到一个问题,即 JSON 对象的属性中有一个句点,即
{
"id": 1234,
"company.id": 4321
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在下划线模板中访问此内容时,出现 JavaScript 错误:
Company ID: <@= company.id @>
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能以及如何访问带有句点的属性。我无法更改 JSON 的生成。
考珀
解决这个问题的一个简单方法是将另一个对象包裹在它周围,以便您可以使用[]来访问\'company.id\'. 例如,您的模板可能如下所示:
<script id="tmpl" type="text/html">\n id: <%= o.id %><br>\n company: <%= o[\'company.id\'] %>\n</script>\xe2\x80\x8b\nRun Code Online (Sandbox Code Playgroud)\n\n你的 JavaScript 是这样的:
\n\nvar html = _.template($(\'#tmpl\').html(), {\n o: {\n "id": 1234,\n "company.id": 4321\n }\n});\nRun Code Online (Sandbox Code Playgroud)\n\n演示: http: //jsfiddle.net/ambigously/wtLkP/1/ \n\xe2\x80\x8b\nUnderscore 模板编译器用于with为模板中的简单内容提供上下文<%= x %>,所以我不认为你\将会比上面的技巧做得更好o.。Underscore 从您的模板构建一个函数,您可以通过查看函数的属性来查看函数的源代码source:
var t = _.template(template_source);\nconsole.log(t.source);\nRun Code Online (Sandbox Code Playgroud)\n\n这会给你这样的东西:
\n\nfunction(obj){\nvar __p=\'\';var print=function(){__p+=Array.prototype.join.call(arguments, \'\')};\nwith(obj||{}){\n__p+=\'\\n id: \'+\n( o.id )+\n\'<br>company: \'+\n( o[\'company.id\'] )+\n\' and stuff\\n\';\n}\nreturn __p;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n你会明白为什么<%= [x] %>不起作用:with只调整当前范围,它不能生成[x]有效的 JavaScript。
| 归档时间: |
|
| 查看次数: |
589 次 |
| 最近记录: |