2014-11-12 1 views
2

나는 훌륭한 Meteor 발견 도서에서 Meteor를 배우고 있으며 Router.go() 함수가 다른 어떤 것으로 생각 될 수있는 방법에 대해 이해하려고 애 쓰고 있습니다. 초보자는에 대한 답변을 사용할 수 있습니다.Router.go()가 Meteor에서 작동하는 방식 이해하기

컨텍스트 : 아래 코드는 postSubmit 양식 (양식에 포함되지 않은 코드)에서 url 및 title 값을 가져 와서이를 사용하여 새 게시물을 만듭니다. 그런 다음 Router.go()을 사용하여 posts/: _ id url에있는 postPage 템플릿으로 이동하여 새로 생성 된 게시물에 대한 정보를 표시합니다. 이 코드는 모두 작동합니다.

내 질문은 : 당신이 Router.go() 전화뿐만 아니라 'postPage'템플릿에 전달할 때, 당신이 두 번째 매개 변수는 포스트 ID에게의 요소입니다로 전달해야 할 것이라고 기대 양식 {_id: post._id} (또한 작동합니다, 나는 그것을 시도했습니다) 경로가 필요로하는 것입니다. 그렇다면 왜 ID가 아닌 post var (URL과 제목을 포함)을 전달합니까?

//post_submit.js 
Template.postSubmit.events({ 'submit form': function(e) { 
    e.preventDefault(); 

    var post = { 
    url: $(e.target).find('[name=url]').val(), 
    title: $(e.target).find('[name=title]').val() 
    }; 

    post._id = Posts.insert(post); 
    //THE 'post' PARAMETER HERE INSTEAD OF '{_id: post._id}' IS WHAT I'M QUESTIONING 
    Router.go('postPage', post); 
    } 
}); 

그리고 라우터에 대한 코드 :

여기 내 코드의

//Route for the postPage template 
Router.route('/posts/:_id', 
    {name: 'postPage', 
    data: function(){ return Posts.findOne(this.params._id); } 
}); 

답변

1

좋은 질문 - 내가 처음 그것을 보았을 때 나는이 혼란을 발견했다. 여기에 무슨 일이 일어나고 있는지의 스케치입니다 :

  1. 라우터는 /posts/:_id을 구문 분석하고 그것이 _id 필드를 포함하는 컨텍스트 개체를 통과해야 함을 이해한다.
  2. Router.go_id 필드가 들어있는 컨텍스트 개체와 함께 호출합니다.
  3. 라우터는 컨텍스트 개체를 가져 와서 _id 값을 this.params으로 복사합니다. 라우터 필드가 요구되는 이해 (하고 나머지는 무시)

때문에 당신이 {_id: 'abc123'} 또는 {_id: 'abc123', title: 'hello', author: 'bob'}. 사실에 전달하면, 실제로 당신이하지 않아도 후자의 작품 편의 단순히 것을 중요하지 않습니다 _id을 별도의 개체로 추출합니다.

+0

David 덕분에 Meteor는 대부분의 프레임 워크보다 훨씬 '지능적'입니다. 가끔은 꽤 믿을 수 없습니다! – iteles

관련 문제