Backbone.js の Ryan Bates の例に従って、Backbone + Eco を使用してプロジェクトを開始しました。それは素晴らしい。ただし、ネストされた属性を表示しようとして立ち往生しています。たとえば、私はこれをやろうとしています:<%= @stream.user.get('name') %>
でindex.jst.eco
、私は取得していUncaught TypeError: Cannot call method 'get' of undefined
ます しかし、私は<%= @stream.get('stream_type') %>
仕事をすることができます.
REST API データは次のとおりです。
[
: {
: : "id":"5004095283de4ca9ff000005",
: : "created_at":"2012-07-16T12:30:10Z",
: : "stream_type":"project",
: : "user":
: : {
: : : "id":"5002f30560de7d0ffb000003",
: : : "name":"Regular User2"
: : },
...
を使用してモデルを拡張しようとしましBackbone.DeepModel
たが、うまくいかなかったようです。
class Project1.Collections.Streams extends Backbone.Collection
url: '/streams'
model: Topaz.Models.Stream
class Project1.Models.Stream extends Backbone.DeepModel
これがコレクションに関する私の見解であり、かなり標準的です。
class Project1.Views.StreamsIndex extends Backbone.View
#views/streams/index.js
template: JST['streams/index']
initialize: ->
@collection.on('reset', @render, this)
@collection.on('add', @appendStream, this) #rerenders entire template
render: ->
$(@el).html(@template())
@collection.each(@appendStream)
this
appendStream: (stream) =>
view = new Topaz.Views.Stream(model: stream)
@$('#streams').append(view.render().el) # looks for the #entries element within the view’s element and not on the page directly
これがモデルのビューです
class Project1.Views.Stream extends Backbone.View
template: JST['streams/show']
className: 'stream-item'
initialize: ->
@model.on('change', @render, this) #The change event is triggered by Backbone when a model saves
render: ->
$(@el).html(@template(stream: @model))
this