私はFlashからJavascriptへの一連のインタラクティブな教育用アプリケーションの変換に取り組んでいます。私のチームはBackbone.jsをフレームワークとして使用する予定です。これらのアプリは、基本的に、ユーザーに情報を提示したり、質問やインタラクティブなウィジェットの形で対話を促すシーンの集まりです。JSONを使用してインタラクティブなBackbone.jsアプリケーションをパワーアップする方法
- アプリが持つ「シーン」やオブジェクトの数など、アプリごとに固有の情報が含まれている一連のJSONファイルは異なるものですユーザに表示されるメッセージおよび/またはウィジェットなど
- ナビゲーション、メッセージなどを表示する方法を管理するバックボーン(おそらくアンダースコア)テンプレートのセット
- シーン間の移動を容易にするためのバックボーンビュー/ルータ/モデルの集合アプリ内でユーザーのやりとりを処理する
- ネイティブJavaScriptで組み込まれたいくつかのインタラクティブウィジェット
もちろん、バックボーンに関しては、私は初心者です。基本的なチュートリアルのいくつかを試してみましたが、Backboneと静的なJSONファイルを統合するのに問題があります。
のは、私は3つのシーンをレイアウトする以下の非常に基本的なJSONファイルが表示されるようにしているとしましょう:
var scenes = [
{
"name": "Introduction",
"label": "Introduction",
"message": "Welcome to this app"
},
{
"name": "Exercise",
"label": "Exercise",
"message": "If this were a real app, there'd be some sort of exercise here"
},
{
"name": "Conclusion",
"label": "Conclusion",
"order": "Thank you for completing this app"
}
]
は私が必要なもの、と私は何をしようとしている、バックボーンは、ナビゲーションを生成することですユーザーがこれらのシーン間を移動し、各シーンのメッセージを表示できるウィジェットです。 (これは明らかに、現実世界のアプリの非常に単純化されたバージョンである)
は、ここで私が試したものです:
// simplified object containing stage information
var stages = [
{
"name": "Introduction",
"label": "Introduction",
"message": "Welcome to this app"
},
{
"name": "Exercise",
"label": "Exercise",
"message": "If this were a real app, there'd be some sort of exercise here"
},
{
"name": "Conclusion",
"label": "Conclusion",
"order": "Thank you for completing this app"
}
];
$(function(){
// create model for each stage
StageModel = Backbone.Model.extend({});
// create collection for StageModel
StageModelList = Backbone.Collection.extend({
model: StageModel
});
var stageModelList = new StageModelList();
// create view for list of stages
StageListView = Backbone.View.extend({
el: $("#stageNav"),
initialize: function() {
// if stages are added later
stagemodellist.bind('add',this.createStageList, this);
},
events: {
'click .stageListItem' : 'selectStage'
},
createStageList: function(model) {
$("#stageList").append("<li class='stageListItem'>"+model.label+"</li>");
},
selectStage: function() {
this.router.navigate("stage/"+this.stage.name,true);
}
});
// create view for each stages
StageView = Backbone.View.extend({
el: $("#stage"),
initialize: function(options) {
// get stage variable from options
this.stage = this.options.stage;
// display stage
createOnEnter(this.stage);
},
createOnEnter: function(stage) {
$("#stageLabel").html(stage.label);
$("#stageMsg").html(stage.message);
}
});
// create router
AppRouter = Backbone.Router.extend({
initialize: function() {
Backbone.history.start();
// create collection
new StageModelList();
// create view when router is initialized
new StageListView();
// loop through stages and add each to StageModelList
for (var s in stages) {
StageModelList.add(stages[s]);
}
},
routes: {
"stage/:stage" : "renderStage"
},
renderStage: function(stage) {
// display StageView for this stage
new StageView({stage:stage});
}
});
var App = new AppRouter();
});
とHTML:
<!DOCTYPE html>
<html>
<head>
<script class="jsbin" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script class="jsbin" src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script class="jsbin" src="http://documentcloud.github.com/backbone/backbone.js"></script>
<script src="js/ilo4.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<p>My pathetic attempt at a Backbone.js app</p>
<div id="stageNav">
<ul id="stageList">
</ul>
</div>
<div id="stage">
<div id="stageLabel">
</div>
<div id="stageMsg">
</div>
</div>
</body>
</html>
(あなたも見ることができますjsbinバージョンはhttp://jsbin.com/iwerek/edit#javascript,html,liveです)。
今は残念ながらこれは何もしません。
は私が間違ってここにたくさんのことをやっていることを知っている、と私は周り蹴るよいくつかの質問:
- 私もルータが必要ですか?
- コレクションを変数として初期化する必要はありますか?
- モデルをステージのリストにバインドするより良い方法はありますか?あなたが実際にあまりにも遠くはありませんでした
素晴らしい - 非常に役立ちます!あなたにバッジを直接授与することができたら、私はそうするでしょう。 – tchaymore
だから、私はリストの各項目のための別々のビューを作成するあなたの助言に従おうとしました。 。 。私はアプリを壊した。あなたは私の試みをここで見ることができます:http://jsbin.com/emicaw/3。何かアドバイス?ビューの質問を開くのは楽しいです。 – tchaymore
私は再びあなたをクローンし、古いコメントをすべて削除し、新しいコメントをいくつか追加しました。 http://jsbin.com/oviqif/2/edit。私はあなたがかなり近くにいると思っています。背骨がどのように働いているのか、ちょうどいくつかの隅や隙間があります。私にとってもそうです。ソース(http://documentcloud.github.com/backbone/docs/backbone.html)を読むことをお勧めします。 1:それはかなりです。 2:それはよく書かれている(コードと散文)3:それは話すために、ボンネットの下で何が起こっているかの良い考えを与えるでしょう。 – satchmorun