2

我觉得自己很愚蠢,但我无法弄清楚这一点。我正在尝试 Handlebars.js,但我无法让它显示来自 Twitter API 的数据。这是我所拥有的:

$.ajax({
  url : 'http://twitter.com/statuses/user_timeline/alexlande.json',
  dataType : 'jsonp',
  success : function( tweets ) {

    var source = $('#tweet-template').html();
    var template = Handlebars.compile(source);
    var context = tweets;

    $('#container').html(template(context));
  }
});

这不会在我的模板中显示任何内容,但以下代码按预期工作:

var source = $('#tweet-template').html();
var template = Handlebars.compile(source);
var context = { tweets : [
  { text : "This is a test tweet" },
  { text : "And this is yet another" },
  { text : "And you always need three test tweets, right?" }
]};

$('#container').html(template(context));

这很简单,我不明白,对吧?

4

2 回答 2

6

在这里,您将一个对象传递给模板函数。

var context = { tweets : [
  { text : "This is a test tweet" },
  { text : "And this is yet another" },
  { text : "And you always need three test tweets, right?" }
]};

$('#container').html(template(context));

但是在不起作用的代码中:

 success : function( tweets ) {

    var source = $('#tweet-template').html();
    var template = Handlebars.compile(source);
    var context = tweets;

    $('#container').html(template(context));
  }

'tweets'变量不是一个对象,它是一个数组。

我认为那是你做错了。尝试这个:

 success : function( tweets ) {

    var source = $('#tweet-template').html();
    var template = Handlebars.compile(source);
    var context = tweets;

    $('#container').html(template({tweets:context}));//wrap in an Object.
  }

发布您的模板也可以提供更多帮助。

于 2012-07-13T06:51:21.270 回答
3

您必须将字符串转换为对象,因为 Handlebar 模板仅包装对象。

尝试这个

success : function( tweets ) {
var source = $('#tweet-template').html();
var template = Handlebars.compile(source);

var context = $.parseJSON(tweets); // convert string into object.
$('#container').html(template(context)); //wrap in an Object.

}

于 2013-09-06T12:35:52.133 回答