2016-03-23 3 views
1

私はバックボーンの初心者です。私はTodo MVCで始まりましたが、今はテストアプリを書こうとしています。私のアプリケーションでは、私はプロジェクトのリストを持っており、このプロジェクトを表示するために1つのプロジェクトをクリックした後にしたいと考えています。以下の私のコード:Backbone.js内のアイテムリストからアイテムをレンダーする

projects.json

[ 
    { 
    "id": 1, 
    "title": "First project", 
    "issues": [ 
     { 
     "id": 11, 
     "title": "main issue", 
     "comment": "lorem ipsum", 
     "time": 30 
     }, 
     { 
     "id": 12, 
     "title": "second issue", 
     "comment": "lorem ipsum", 
     "time": 60 
     } 
    ] 
    }, 
    { 
    "id": 2, 
    "title": "Second project", 
    "issues": [ 
     { 
     "id": 21, 
     "title": "main issue", 
     "comment": "lorem ipsum", 
     "time": 90 
     }, 
     { 
     "id": 22, 
     "title": "on more issue", 
     "comment": "lorem ipsum", 
     "time": 60 
     } 
    ] 
    }, 
    { 
    "id": 3, 
    "title": "Test project", 
    "issues": [ 
     { 
     "id": 31, 
     "title": "main issue", 
     "comment": "lorem ipsum", 
     "time": 20 
     }, 
     { 
     "id": 32, 
     "title": "second issue", 
     "comment": "lorem ipsum", 
     "time": 50 
     }, 
     { 
     "id": 33, 
     "title": "new issue", 
     "comment": "lorem ipsum", 
     "time": 40 
     }, 
     { 
     "id": 34, 
     "title": "recently added issue", 
     "comment": "lorem ipsum, lorem ipsum", 
     "time": 60 
     } 
    ] 
    } 
] 

project.js

var Project = Backbone.Model.extend({ 

    defaults: { 
     title: '', 
     id: null, 
     issues: [] 
    } 
}); 

projects.js

var ProjectList = Backbone.Collection.extend({ 
    model: Project, 
    url: 'data/projects.json' 
}); 

件のプロジェクト-view.js

var ProjectsView = Backbone.View.extend({ 
    el: ".project-list", 
    template: _.template($('#projects-template').html()), 

    render: function(eventName) { 
     _.each(this.model.models, function(project){ 
      var projectsTemplate = this.template(project.toJSON()); 
      $(this.el).append(projectsTemplate); 
     }, this); 

     return this; 
    } 
}); 

var ProjectView = Backbone.View.extend({ 
    el: '.issue-list', 
    template: _.template($('#project-template').html()), 

    render: function(eventName) { 
     _.each(this.model.models, function(project){ 
      var projectTemplate = this.template(project.toJSON()); 
      $(this.el).append(projectTemplate); 
     }, this); 
     return this; 
    } 
}); 

router.js

var Workspace = Backbone.Router.extend({ 

    routes: { 
     '': 'projectsList', 
     'project/:id': 'issuesList' 
    }, 

    projectsList: function(){ 
     var projects = new ProjectList(); 
     var projectsView = new ProjectsView({model: projects}); 
     projects.fetch({ 
      success: function() { 
       projectsView.render(); 
      } 
     }); 
    }, 
    issuesList: function(id){ 
     var project = new Project({id: id}); 
     var projectView = new ProjectView({model: project}); 
     project.fetch({ 
      success: function() { 
       projectView.render(); 
      } 
     }) 
    } 
}); 

var router = new Workspace(); 
Backbone.history.start(); 

index.htmlを

<section id="content"> 
    <div class="col-xs-6 col-xs-offset-3"> 
     <ul class="project-list issue-list list-group list-unstyled"></ul> 
    </div> 
</section> 

<script id="projects-template" type="text/template"> 
<li class="text-center"> 
    <a href="#" class="list-group-item project"><%= title %></a> 
</li> 
</script> 

<script id="project-template" type="text/template"> 
<li class="text-center"> 
    <a href="#" class="list-group-item"><%= issues %></a> 
</li> 
</script> 

<script src="lib/jquery-2.2.1.min.js"></script> 
<script src="lib/underscore-min.js"></script> 
<script src="lib/backbone-min.js"></script> 
<script src="lib/backbone.localStorage.js"></script> 
<script src="lib/bootstrap.min.js"></script> 

<script src="js/models/project.js"></script> 
<script src="js/collection/projects.js"></script> 
<script src="js/views/projects-view.js"></script> 
<script src="js/routers/router.js"></script> 

どのように私はこれを達成することができますか?アドバイスありがとう!

+2

あなたの問題は何ですか? – hindmost

+0

@hindmost、何かのプロジェクトをクリックしても何も起こらないので、プロジェクトのリストの代わりにその属性を持つプロジェクトを表示するためにプロジェクトにクリックした後、何が必要なのかを尋ねた –

+0

まずコレクションをモデルとして指定しないでください。プロジェクトビューでは、 'this.model.models'は何になると思いますか?これは、コピーしたコードをコピーして名前を変更し、それが動作することを期待しているように見えます(アイテムビューはコレクションビューの同じレンダリングコードでどのように機能するのですか?そのようなことはしません... issuesListが起動されるかどうかをチェックするような基本的なデバッグをしましたか? –

答えて

0

はあなたのアンカーのhrefを変更することはできませんプロジェクト・テンプレート#へのプロジェクト/ <% = ID%が代わりに#の私は前にバックボーンを使用していない>が、私は彼らのルータがそのように動作しなければならないと考えている

+0

私はアドレスバーにプロジェクト番号を取得します –

+1

これはむしろコメントです。 [ソースを調べる](http://backbonejs.org/docs/backbone.html)であなたの推測を確認し、証明しようとすることなしに '使われていない'と '信じる'はあまり良くありません。 –

+0

ちょうど私はコメントを追加するのに十分な担当者がいないが、提案をしたい –

関連する問題