js不喜欢前面有方括号

Handlebars.js doesn't like square brackets in the front

本文关键字:方括号 前面 不喜欢 js      更新时间:2023-09-26

我使用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对象。