ruby-on-rails – 每个Backbone.js把手

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 每个Backbone.js把手前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将Ryan的 RailsCast on Backbone.js转换为使用Handlebars并且我遇到了一个简单的问题.

我似乎无法遍历JSON数组并显示结果.我在我的Gemfile中使用这些宝石

gem 'backbone-on-rails'
gem 'handlebars_assets'

在我的index.jst.hbs中,我有以下内容

{{entries.length}}

<ul>
    {{#each entries.models}}
        <li>{{name}}</li>
    {{/each}}
</ul>

API调用似乎正常工作,您可以在屏幕截图中的7个数字中看到.

但是,不显示每个模型的内容.这是下面的View(index.js.coffee)和JSON响应.

class Raffler.Views.EntriesIndex extends Backbone.View
      template: JST['entries/index']

      initialize: ->
        #triggered when view gets created,listen to 'reset' event,then re-@render,pass 'this' for context binding
        @collection.on('reset',@render,this)

      render: ->
        $(@el).html(@template(entries: @collection))
        this

JSON:

[
{
"created_at":"2012-06-28T18:54:28Z","id":1,"name":"Matz","updated_at":"2012-06-28T18:54:28Z","winner":null
},{
"created_at":"2012-06-28T18:54:28Z","id":2,"name":"Yehuda Katz","id":3,"name":"DHH","id":4,"name":"Jose Valim",{
"created_at":"2012-06-28T18:54:29Z","id":5,"name":"Dr Nic","updated_at":"2012-06-28T18:54:29Z","id":6,"name":"John Nunemaker","id":7,"name":"Aaron Patterson","winner":null
}
]

解决方法

你的@collection可能是一个Backbone.Collection. Handlebars会将它看作某种数组,以便{{entries.length}}按预期工作,{{#each entries.models}}迭代正确的次数;但是,Handlebars不知道如何使用@ collection.models中的Backbone.Model.

使用toJSON将@collection转换为原始数据,Handlebars知道如何处理简单的JavaScript数组和对象:

render: ->
    @$el.html(@template(entries: @collection.toJSON()))
    @

然后调整模板以查看条目而不是entries.models:

<ul>
    {{#each entries}}
        <li>{{name}}</li>
    {{/each}}
</ul>

演示:http://jsfiddle.net/ambiguous/tKna3/

Backbone的一般规则是将model.toJSON()或collection.toJSON()传递给您的模板,这样他们就不必了解Backbone方法(例如get),这样您的模板就不会意外地改变你的模板模特和收藏品.

猜你在找的Ruby相关文章