私はBackbone.jsを初めて使用し、現在のRailsアプリに統合しようとしています。railscastのチュートリアルに従っていますが、それらを統合するのに問題があります。基本的に、私は自分のリソース(プロジェクト)を呼び出して、それらをページに表示しようとしているところです。私のルーターは次のようになります。
class Placeholder.Routers.Projects extends Backbone.Router
routes:
'': 'index'
'projects/:id':'show'
initialize: ->
@collection = new CIS196Project.Collections.Projects()
@collection.fetch()
index: ->
view = new Placeholder.Views.ProjectsIndex()
$('#container').html(view.render().el)
show: (id) ->
alert "Project #{id}"
私の見解は次のようになります。
class Placeholder.Views.ProjectsIndex extends Backbone.View
template: JST['projects/index']
initialize: ->
document.write(@collection)
@collection.on('reset', @render, this)
render: ->
$(@el).html(@template(projects: @collection))
this
私はほとんどチュートリアルから直接取ったものです。document.write(@collection)
テストに追加しました。
ページをロードすると、次のエラーが発生します。
projects_index.js:17 Uncaught TypeError:undefinedのメソッド'on'を呼び出せません
fetch()
ログでGETリクエストが正常に通過し、chromeのコンソールで試行すると、フェッチはサイズ1の配列を返すはずですが、代わりにそのエラーが発生するため、ルーターで正常に作成しています。コントローラからデフォルトのレールビューをロードします(これが発生する理由もわかりません。定義されたテンプレートがありますが、このエラーがスローされると、document.writeを呼び出さない限り、前のビューに戻ります。 )。を呼び出すとdocument.write
、@collection
「未定義」として出力されます。
助けてくれてありがとう!