自分用の簡単なポートフォリオ サイトを作成して、Backbone.js の使用を開始しました。現時点ではあまり機能がありませんが、ライブラリに慣れてきたら、さらに追加したいと考えています。json を使用して、すべてのポートフォリオ アイテムを一覧表示するか、ルートに応じてそのうちの 1 つを表示するサイトのデータを入力しています。ポートフォリオ アイテムのリストが動作/表示されていますが、特定のルート (/#projects/2 など) のアイテムを 1 つだけ表示するのに苦労しています。ここで助けが必要です。
バックボーンの学習を開始し、さまざまなボイラープレートとチュートリアルを見てきましたが、どれも大きな助けにはなりませんでした。
これらのルートで、私はこれが起こることを望みます:
- / - ポートフォリオ アイテムのリスト
- /#projects - ポートフォリオ アイテムのリスト
- /#projects/3 - 1 つのポートフォリオ アイテム
JSbin に試してみましたが、json を適切にロードする方法がわからないため、うまくいきません...
モデルではなくコレクションにすべてのアイテムをロードしているため、問題が発生することは確かです。そうですか?
- どうすればこれを機能させることができますか?
- どうすればこれを改善できますか?
[編集 - - - - - - - - - - ]
以下のピーターの親切な助けの後、私はまだ援助を必要としています. 彼は言った:
ビューには 1 つのモデルが表示され、コレクション ビューにはモデルごとに 1 つのビューのリストが表示されます。
では、json データから 1 つのアイテムを表示するビューを作成し、コレクション ビューを作成してそれらすべてを表示するにはどうすればよいでしょうか。私が尋ねる理由は、私はそれらすべてを問題なく返品できるためですが、単一のアイテムを返品するのは非常に難しいことがわかっています..
コード例も更新しました: http://jsbin.com/asezul/8/edit
[ - - - - - - - - - - -編集]
さらに情報が必要な場合はお知らせください。私は Backbone を初めて使用するので、質問に答えるのに役立つ重要な部分を見逃している可能性があります。
以下はコードの抜粋ですが、JSbin でコードを表示することをお勧めします。
モデル:
SITE.Project = Backbone.Model.extend({
initialize: function() {
console.log(this, this.attributes.name);
}
});
コレクション:
SITE.Projects = Backbone.Collection.extend({
model: SITE.Project,
url: 'content.json',
parse: function(response) {
console.log(response);
return response.portfolio;
}
});
ビュー:
SITE.ProjectsView = Backbone.View.extend({
el: '#main',
initialize: function() {
_.bindAll(this, 'render');
// create a collection
this.collection = new SITE.Projects();
// Fetch the collection and call render() method
var that = this;
this.collection.fetch({
success: function () {
that.render();
}
});
},
template: SITE.helpers.template('project-list'),
render: function() {
$(this.el).html(this.template({ projects: this.collection.toJSON() }));
}
});
ルーター:
SITE.Router = Backbone.Router.extend({
initialize: function() {
this.el = $('#main');
},
routes: {
"": "index",
"projects": "projects",
"projects/:id": "project"
},
// Homepage / List of projects
index: function() {
var view = new SITE.ProjectsView();
},
// List of projects
projects: function() {
var view = new SITE.ProjectsView();
},
// Individual Project
project: function(id) {
var view = new SITE.ProjectView();
console.log("You are trying to reach project " + id);
}
});