1

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
4

0 に答える 0