0

基本上,在 Backbone & coffeescript 中,我从 Twitter API 中提取推文。获取 JSON 有效,但将模板加载到 html 中无效。拉入模板在渲染函数中起作用,但在 @Tweets.fetch() 函数中不起作用。

似乎失败的代码行是..

$(@.el).html(_.template($('#leTweets').html(), {tweets: tweets.models, _:_} ))

我的视图看起来像这样......

class HomeView extends Backbone.View
        constructor: ->
            super

        initialize: ->
            @Tweets= new TweetsCollection

        render: ->
            @loadResults()

        loadResults: ->
            @Tweets.fetch({
                success: (tweets) ->
                    $(@.el).html(_.template($('#leTweets').html(), {tweets: tweets.models, _:_} ))
                error: ->
                    alert('Error!')
            })

我的 HTML 如下所示:

<script type="text/template" id="leTweets">

    <div data-role="header" data-position="fixed">
        <h1>TWEETS</h1>
    </div>

    <div data-role="content">
        <h3>Tweets</h3>
        <ul class="tweets">
        <% _.each(tweets, function (tweet) { %>

          <li><%= tweet.get('text') %></li> 

        <% }); %>
        </ul>
    </div>

</script>

我的收藏看起来像这样:

class PropertyCollection extends Backbone.Collection

    constructor: ->
        super

    url: ->
        'http://search.twitter.com/search.json?q=' + @query + '&page=' + @page + '&callback=?'

    parse: (resp, xhr) ->
        resp.results

    page: 1,
    query: "Backbone"

任何帮助将不胜感激,谢谢。

4

1 回答 1

2

我认为问题在于您的成功处理程序中的“this”(coffeescript 中的@)的范围不是您的 HomeView,而是“窗口”。因此“window.el”不存在。

简单的解决方案是使用“胖箭头”将事件处理程序的范围设置为视图:

  success: (tweets) =>
      $(@.el).html(_.template($('#leTweets').html(), {tweets: tweets.models, _:_} ))

This jsFiddle shows a working example: http://jsfiddle.net/edwardmsmith/PwMSP/6/

于 2012-08-14T10:26:08.513 回答