0

私は本、Backbone.js on Railsに従っており、それを読んで基本的なtodoアプリケーションを作成していますが、アプリケーションの名前空間内のコレクションを初期化しようとすると、次のjavascriptエラーが発生します:

エラー: TodoApp.Collections.Notes はコンストラクターではありません ソース ファイル: localhost:3000/assets/todo_app.js?body=1 行: 13

todo_app.js

var TodoApp = {
  Models: {},
  Collections: {},
  Views: {},
  Routers: {},
  initialize: function(data) {
    console.log("INITIALIZE");
    var notes = new TodoApp.Collections.Notes(data.notes); 
    new TodoApp.Routers.Notes({ notes: notes }); 
    Backbone.history.start();    
  }
};

ここまでの手順に従って、Note モデル、Notes コレクション、ルーターを作成しました。index.html.erb で初期化メソッドを呼び出す方法は次のとおりです。

<%= javascript_tag do %>
  TodoApp.initialize({ notes: <%== @notes.to_json %> });
<% end %>

これは、すべてのファイルを含める順序です。

//= require jquery
//= require jquery_ujs
//= require underscore
//= require json2
//= require backbone
//= require backbone-support
//
//= require todo_app
//
//= require_tree ./models 
//= require_tree ./collections 
//= require_tree ./views 
//= require_tree ./routers 
//= require_tree ../templates
//= require_tree .

誰でもこれを手伝ってもらえますか?ここで見逃したものは何ですか?ありがとう

4

4 に答える 4

0

新しいコレクションをインスタンス化してから、メソッドを使用してそれを埋めることができますreset

あなたの例では、次のようになります。

initialize: function(data){
  var notes = new TodoApp.Collections.Notes()
  notes.reset(data.notes) 

}

「リセット」メソッドは、モデルのリストまたはハッシュのいずれかを受け入れます。詳細については、バックボーンのドキュメントを参照してください。

この方法を使用するもう1つの良い方法は、Webページに情報をプリロードしてから、コレクションに保存されたデータを入力することです。次のようなデータタグを使用して、divにisを挿入できます。

<%= content_tag "div", "Can be blank", id: "container-id", data: { notes: Notes.all } %>

そして、電話してください:

notes.reset($('#container-id').data 'notes')

詳細については、BackboneのRyanBatesスクリーンキャストを確認してください。それらのビデオを見るには、彼のサイトに登録する必要があることに注意してください。

PS:yout todo_app.jsの場所がjavascriptアセットフォルダーにある場合は、アセットパイプラインを使用して追加する必要はありません。これは、レールによって//= require_tree .回線によって自動的に取得されるためです。

于 2013-02-26T02:07:01.490 に答える
0

使用してみてください:

TodoApp.initialize({ notes: <%= @notes.to_json.html_safe -%> });
于 2013-02-25T21:26:49.267 に答える
0

TodoApp.initialize({ notes: <%== @notes.to_json %> });タイプミスのようです。TodoApp.initialize({ notes: <%= @notes.to_json %> });代わりにすべきです。

于 2012-10-19T09:55:21.603 に答える
0

Javascript は読み込まれた順に評価されるため、コレクションを含むファイルが読み込まれる前にアプリが初期化しようとしていると思います (他のファイルの前に todo_app を含めています)。

todo_app を最後に含めるか、ドキュメントの onload イベントをリッスンして、ページが完全に読み込まれた後にアプリを初期化します。

于 2012-10-19T09:56:25.377 に答える