2013-08-05 3 views
1

나는 내 응용 프로그램과 홈 페이지에 표시되는 목록을 통해 액세스 할 수있는 각 게시물에 대한 다른 페이지에 하나의 메인 홈 페이지를 ..을백본 컬렉션 얻을 (ID) 메소드

내 라우터처럼 보이는 방법이있다 :

var AppRouter = Backbone.Router.extend({ 

    initialize: function(){ 
     this.model = new model(); 
     this.collection = new collection(); 
    }, 


    routes: { 
     "" : "showForm", 
     "post/:id" : "showPost" 
    }, 


    showPost: function(id){ 
     var curmodel = this.collection.get(id); 
     var post = new postView({model:curmodel}); 
     post.render(); 
     $(".maincontainer").html(post.el); 

    }, 

    showForm : function(){ 
     var qcView = new qcV({model:this.model, collection:this.collection}); 
     qcView.render() 
     $(".maincontainer").html(qcView.el); 
    } 
}); 

<h2><a id= "<%=_id%>" href="#post/<%=_id%>"><%=name%></h2></a> 

내 첫 번째 질문은 같은이 목록에서 게시물 링크 중 하나가 모습입니다 : 그것은 위험이 m에 해시 기반의 URL로 페이지를 링크 수 있나요 아나?

내 두 번째 질문은 : 내 홈페이지에서 링크 중 하나를 클릭하면 게시물보기로 이동하는 데 문제가 없습니다. 내 URL이 http://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034과 같이 성공적으로 변경되고 특정 게시물의보기가 렌더링됩니다. 그러나 그 시점에서 페이지를 새로 고치거나 내 URL 표시 줄에 http://127.0.0.1:3000/#post/51ffdb93c29eb6cc17000034을 직접 입력하면 라우터의 showPost 메서드에있는 this.collection.get(id) 메서드가 undefined을 반환합니다. 왜 이런 경우인지 알아낼 수 있습니까? 가장 가능성이 "포스트"노선에 컬렉션을 가져 오는 아닌,

나는 나의 초기화 방법은 두 번 호출되는 몇 번을 확인하고, 내 컬렉션과 모델 # 2의 성공적

답변

3

생성됩니다. 콜렉션을 가져오고 (존재하지 않는 경우) 콜드 렌더를 호출하십시오. 그 트릭을해야합니다!

+0

컬렉션이 존재하기 때문에 정말 흥미 롭습니다. 내 콘솔에서 인쇄 할 때 볼 수 있습니다. 내가 찾고있는 모델을 볼 수도 있습니다. –

+0

우리는 분명히 중요한 것을 놓치고 있습니다. 데이터를 어디에서 가져 오는 중입니까? –

2

@ Trunal이 2 번째 질문의 올바른 경로라고 생각합니다. 첫 번째로는 위험하지 않습니다. 고전적인 서버 측 응용 프로그램과는 다른 것을 실제로하지 않고 정보를 검색하기 위해 GET을 통해 서버에 정보를 전달합니다. 필자의 의견으로는 backbone.history.navigate을 수동으로 트리거하지 않고 모든 경로에서 구현 방법을 선택하는 것이 좋습니다. 그렇지 않으면 발생할 수있는 모든 종류의 설치 및 이벤트 문제를 피할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 제 2 질문에 계속 진행중인 사항이 있습니다. 목록에서 새 탭의 링크를 열려고해도 게시물이 렌더링되지 않습니다. –

+0

@trunal 유감스럽게도 여러분은 완전히 옳았습니다. 단지 this.collection.fetch()에 코드를 넣어야했습니다.() {}); –

+0

시원하게, 다행스럽게 도울 수있었습니다! –