Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript handlebar.js不喜欢前面的方括号_Javascript_Backbone.js_Handlebars.js - Fatal编程技术网

Javascript handlebar.js不喜欢前面的方括号

Javascript handlebar.js不喜欢前面的方括号,javascript,backbone.js,handlebars.js,Javascript,Backbone.js,Handlebars.js,我正在使用PHP后端、Backbone.js和handlebar.js。我的javascript请求数据,JSON数据成功返回JSON_encode 当我将此JSON数据提供给Handlebar模板时,它不会显示。我意识到我的JSON对象前面和后面的方括号是handlebar.js“不喜欢”的,没有显示出来。请看下面的代码 var ArticleListView = Backbone.View.extend( { el: $('#main'), render: function()

我正在使用PHP后端、Backbone.js和handlebar.js。我的javascript请求数据,JSON数据成功返回JSON_encode

当我将此JSON数据提供给Handlebar模板时,它不会显示。我意识到我的JSON对象前面和后面的方括号是handlebar.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;    
  }
});
现在,如果我把支架拿出来,它可以正常工作。发生什么事?首先为什么方括号在那里?如何摆脱它们?

需要一个上下文对象,因为它使用上下文作为模板值的简单查找表。所以您需要将对象{…}传递给模板,而不是数组[…]

有人会给您一个包含所需上下文对象的单元素数组。修复生成JSON的PHP,在不使用数组包装器的情况下以PHP术语发送JSONified对象关联数组,或者在客户机代码中使用以下方法去除数组:

$(this.el).html(template(context[0]));
{{people.attributes.[0]}} // akin to people.attributes[0]
{{people.attributes.[1]}} // akin to people.attributes[1]
如果您有以下文字代码:

$(this.el).html(template([{"articles":[{"title" : "1"}, {"title" : "2"}]}]));
在JavaScript文件中,您必须确定生成代码的内容并修复它。如果您的主干视图中嵌入了这样的文字数据,那么您可能没有正确使用主干,模板的数据可能来自主干模型


如果您是从主干模型获取JSON,那么我猜您是在调用一个集合,该集合返回一个数组,而不是一个模型,该模型应该为您提供一个JavaScript对象。

调用handlebar来循环集合的输出是完全合理的。 此外,对于视图中的数据处理,阵列也是一个不错的设计决策

车把有一个特殊的语法来处理数字或符号标识符。因此,更正确的答案是把手可以访问以下模板中的阵列:

$(this.el).html(template(context[0]));
{{people.attributes.[0]}} // akin to people.attributes[0]
{{people.attributes.[1]}} // akin to people.attributes[1]
输入:邮件:[{标题:{主题:[你好,亲爱的,…另一个]}},…更多]

<ul>
  {{#each mails}}
    <li>.
        {{headers.subject.[0]}}
    </li>
  {{/each}}
</ul>

谢谢你的回答。这很有帮助。在上一段中,您说过,对集合调用toJSON将返回一个数组。如果是这种情况,如果我想将该集合传递给Handlebar模板,我会再次使用相同的方括号吗?@ebae:您需要为数组指定一个名称,模板{stuff:stuffs.toJSON}。酷。顺便问一下,我做得对吗?我的意思是,我必须一直给数组命名吗?我看到的其他教程和示例都没有做到这一点。那么我有什么不同呢?@ebae:你需要一个顶级的名字,否则就没有办法引用数组了。如果您的toJSON返回一个对象,那么您可以使用templatestuff.toJSON直接访问模板中的内容属性。