js不喜欢前面有方括号
Handlebars.js doesn't like square brackets in the front
我使用PHP-backend, Backbone.js和Handlebars.js。我的javascript请求数据,JSON数据成功返回(json_encode)。
当我将这个JSON数据提供给车把模板时,它没有显示。我意识到JSON对象前面和后面的方括号是Handlebars.js不喜欢的,并且没有显示。看看下面的代码:
var ArticleListView = Backbone.View.extend(
{
el: $('#main'),
render: function()
{
var template = Handlebars.compile($("#articles_hb").html());
$(this.el).html(template([{"articles":[{"title" : "1"}, {"title" : "2"}]}]));
return this;
}
});
现在,如果我把括号拿出来,它可以正常工作。这是怎么呢为什么这里会有方括号呢?我怎么摆脱他们?
调用Handlebars循环遍历集合的输出是完全合理的。此外,对于视图中的数据处理,数组也是一个不错的设计决策。
Handlebars具有处理数字或符号标识符的特殊语法,如下所述。所以,更正确的答案是Handlebars可以像这样访问模板中的数组:
{{people.attributes.[0]}} // akin to people.attributes[0]
{{people.attributes.[1]}} // akin to people.attributes[1]
输入:邮件:[{headers: {subject: ["Hello Darling", "…"另一个"]}},……更多)
<ul>
{{#each mails}}
<li>.
{{headers.subject.[0]}}
</li>
{{/each}}
</ul>
Handlebars需要一个上下文对象,因为它使用上下文作为模板值的简单查找表。所以你需要传递一个对象({ ... }
)给template()
,而不是一个数组([ ... ]
)。
有人给了你一个包含你需要的上下文对象的单元素数组。要么修复生成JSON的PHP,使其在没有数组包装器的情况下发送JSONified对象(PHP术语中的关联数组),要么在客户端代码中去掉数组,如下所示:
$(this.el).html(template(context[0]));
如果你有这样的文字代码:
$(this.el).html(template([{"articles":[{"title" : "1"}, {"title" : "2"}]}]));
在你的JavaScript文件,那么你必须是什么产生的代码和修复它。如果你在你的Backbone视图中嵌入了这样的文字数据,那么你可能没有正确地使用Backbone,你的模板中的数据可能应该来自Backbone模型。
如果你从一个主干模型得到JSON那么我猜你调用toJSON
在一个集合(返回一个数组),而不是一个单一的模型,其中toJSON
应该给你一个JavaScript对象。
- 如何在下面的ES6循环中获得前面的文本
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 下拉列表在使用z索引放置在前面后停止工作
- 使用方括号访问插件原型函数
- setTimeout函数能否在其前面的代码执行之前激发
- 如何使用Javascript在给定的句子中找到大写单词并在其前面添加一个字符
- 在javascript中使用方括号表示法的嵌套对象
- 正则表达式,用于匹配JavaScript的括号和方括号
- 如何获得前面有“”的字符;add_”;
- 如何在AngularJS URL中的hashtag(#)前面加上字符串
- Node.js-等待process.exit()在前面的代码完成后执行
- 将一个元素放在具有相同z索引的其他元素前面
- 在Javascript中,变量前面的+运算符是什么
- 删除双引号和方括号JSON
- jQuery在.each中查找前面的元素标签
- FabricJS-组选择使对象在选择时处于最前面
- Regex查找前面没有特定字符的字符
- Javascript在字符串中嵌套了方括号
- 用于获取两个方括号之间的数字的正则表达式
- Regex删除方括号和前面方法名之间的内容