0

Backbone/Railsプロジェクトに2つ目のコレクションを追加する際に問題が発生しました

これがコレクション会社のクラスファイルです

class Raffler.Collections.Companies extends Backbone.Collection
  url: '/api/companies'
  model: Raffler.Models.Company

これがモデルのクラスファイルです

class Raffler.Models.Company extends Backbone.Model

これがルーターです

class Raffler.Routers.Companies extends Backbone.Router
  routes:
    'companies': 'index'
    'companies/:id' : 'show'

  initialize: ->
    @companies = new Raffler.Collections.Companies()
    @companies.fetch()
    alert @companies

  index: ->
    view = new Raffler.Views.CompaniesIndex(collection: @companies)
    $('#container').html(view.render().el)

そしてここにビューがあります

class Raffler.Views.CompaniesIndex extends Backbone.View

  template: JST['companies/index']

  initialize: ->
    @companies.on('reset', @render, this)

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

に到達するとフォールオーバーし@companies.onます-エラーは未定義でメソッド'on'を呼び出すことができません。

このエラーを理解していません-@companiesルーターでコレクションとしてを設定し、ルータークラスで作成されたビューに渡しました。

アプリケーションの別のコレクションにまったく同じコードを実装しているので、2つ目のコレクションを追加しようとしているのでしょうか?

次の手順を実行すると、ブラウザのjavascriptコンソール内ですべて完全に機能します

companies = new Raffler.Collection.Companies()
companies.fetch()
companies.length

サーバーを呼び出して正しい数のレコードを返していることがわかります。それでは、なぜコードがアプリケーション内で機能しないのでしょうか。何か案は?

4

1 に答える 1

3

あなたのルーターでは、あなたはこれを言います:

view = new Raffler.Views.CompaniesIndex(collection: @companies)

これにより、新しいCompaniesIndexの@collectionプロパティ@companiesが次のように設定されます。

渡された場合、ビューに直接アタッチされるいくつかの特別なオプションがあります:[...] collection[...]。

したがって、あなたの見解では、@collectionではなく、を参照する必要があります@companies

class Raffler.Views.CompaniesIndex extends Backbone.View
  #...
  initialize: ->
    @collection.on('reset', @render, @)

@companiesはルータ内でのみ定義され、ビュー内@collectionに何かを明示的に割り当てない限り、ビューはそれについてのみ認識@companiesします。

于 2012-04-23T19:19:36.110 に答える