私はNode.js/Express/Jade/Backbone.jsを使いこなし、ポーカートーナメントを記録する簡単なWebアプリケーションを試して、いくつかのJavaScriptブックを勉強しています私の初心者のJSスキルを向上させ、前述の技術を学び、まともなポーカーアプリを同時に作ります。Backbone.js .reset()データのブートストラップに失敗する
(function ($) {
window.Tournament = Backbone.Model.extend({});
window.Tournaments = Backbone.Collection.extend({
model: Tournament,
url: '/tournaments'
});
window.tournaments = new Tournaments();
// I removed this line once I attempted to bootstrap the data.
window.tournaments.fetch();
window.TournamentView = Backbone.View.extend({
tagName: 'tr',
className: 'tournaments',
initialize: function() {
_.bindAll(this, 'render');
this.model.bind('change', this.render);
this.template = _.template($("#tournament-template").html());
},
render: function() {
var renderedContent = this.template(this.model.toJSON());
$(this.el).html(renderedContent);
return this;
}
});
window.TournamentsView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, 'render');
this.collection.bind('reset', this.render);
},
render: function() {
$(this.el).html($("#tournaments-template").html());
(this.collection).each(function(tournament) {
var view = new TournamentView({
model: tournament,
collection: this.collection
});
$("#tournaments").append(view.render().el);
});
return this;
}
});
window.BackboneTournaments = Backbone.Router.extend({
routes: {
'': 'tournaments'
},
initialize: function() {
this.tournamentsView = new TournamentsView({
collection: window.tournaments
});
},
tournaments: function() {
$("#container").empty();
$("#container").append(this.tournamentsView.render().el);
}
});
$(function() {
window.App = new BackboneTournaments();
Backbone.history.start({});
});
})(jQuery);
これは完璧に動作します:これは私がこれまでのところ、ウェブとPeepCodes最初BACKBONE.JSスクリーンキャストを中心にさまざまなソースを使用して(私はバックエンドのAPIとして設定のNode.jsている)しているコードです。ポーカートーナメントのポピュレートテーブルがあるページがあります。しかし、データをブートストラップして、ページがロードされた後にフェッチしないようにした後(そして、未使用のテーブルを数秒間表示する)、それはもはや機能しません。私は、Backbone.jsで使用されているコンテナ(#container)の直後に、アプリケーションの1ページ(app.jade、Jadeテンプレート)の本文に次のコードを入れて、windows.tournaments.fetch( );上記のコードからの行。
script(type="text/javascript")
tournaments.reset(!{JSON.stringify(tournies)});
tourniesオブジェクトは、それをレンダリングNode.jsのルートからジェイドテンプレート(app.jade)に渡されます。 Firebugを使用すると、reset()関数がJSON形式のデータを正常に取得していて、テーブルがBackboneによって作成されていることがわかりますが、データは移入されません。問題が何であるかについて私は全くの手がかりがないので、どんな助けもありがたい。また、前に投稿していないので、私の質問の構造に間違いを犯した場合、私はお詫び申し上げます。私が持っているならば、私に知らせてください。私の第二は、あなたがJSONデータを調べる必要があるということです
$(document).ready(function(){
tournaments.reset(!{JSON.stringify(tournies)});
});
:
はどのように 'tournaments.reset({JSON.stringify(tournies):
あなたのコード上の注意点、あなたはこのようなスキーマを使用して、モジュールパターンと名前のものを使用する必要があり、より良いあなたのコードを整理します}) 'あなたに何かのエラーを渡しませんか? –
私は分かりません。それは私にエラーを渡すべきですか?私は、http://dailyjs.com/2011/04/04/node-tutorial-19/とhttp://documentcloud.github.com/backbone/#FAQ-bootstrapからデータをブートストラップするための特定のリファレンスをまとめています。私は自分のトーナメントコレクションでresetメソッドを実行し、トーナメントに対応するJSONオブジェクトの配列を渡しています。 –
それはJavaScriptではなくJadeテンプレートにありますか?それを明確にしたいかもしれません。 –