2013-07-30 4 views
20

Próbuję podążać za this basic Ember.js tutorial, ale nie mam szczęścia w modelu "wpisów". Mam wszystko skonfigurować zgodnie z demonstracji, jednak otrzymuję błąd:Uncaught Przekazano więcej obiektów kontekstu niż segmentów dynamicznych dla trasy: post

Uncaught More context objects were passed than there are dynamic segments for the route: post

Ponieważ jest to pierwszy raz, jaki kiedykolwiek pracował z aplikacji ember.js, szczerze mówiąc nie mam pojęcia, co to znaczy. Każda pomoc (dosłownie wszystko) zostanie bardzo doceniona.

Oto moja App.js

App = Ember.Application.create(); 

App.Store = DS.Store.extend({ 
    adapter: 'DS.FixtureAdapter' 
}); 

App.Router.map(function() { 
    this.resource('posts', function() { 
     this.resource('post', { path:'post_id'}) 
    }); 
    this.resource('about'); 
}); 

App.PostsRoute = Ember.Route.extend({ 
    model: function() { 
     return App.Post.find(); 
    } 
}) 

App.Post = DS.Model.extend({ 
    title: DS.attr('string'), 
    author: DS.attr('string'), 
    intro: DS.attr('string'), 
    extended: DS.attr('string'), 
    publishedAt: DS.attr('date') 
}); 

App.Post.FIXTURES = [{ 
     id: 1, 
     title: "Rails in Omakase", 
     author: "d2h", 
     publishedAt: new Date('12-27-2012'), 
     intro: "Blah blah blah blah", 
     extended: "I have no clue what extended means" 
    }, { 
     id: 2, 
     title: "Second post", 
     author: "second author", 
     publishedAt: new Date('1-27-2012'), 
     intro: "second intro", 
     extended: "Second extended" 
    }]; 

A oto html dla słupków.

<script type="text/x-handlebars" id="posts"> 
    <div class="container-fluid"> 
     <div class="row-fluid"> 
      <div class="span3"> 
       <table class='table'> 
       <thead> 
        <tr><th>Recent Posts</th></tr> 
       </thead> 
       {{#each model}} 
       <tr><td> 
        {{#linkTo 'post' this}}{{title}} <small class='muted'>by {{author}}</small>{{/linkTo}} 
       </td></tr> 
       {{/each}} 
       </table> 
      </div> 
      <div class="span9"> 
       {{outlet}} 
      </div> 
     </div> 
    </div> 
</script> 
<script type="text/x-handlebars" id="post"> 
    <h1>{{title}}</h1> 
    <h2> by {{author}} <small class="muted">{{publishedAt}}</small></h2> 

    <hr> 

    <div class="intro"> 
     {{intro}} 
    </div> 

    <div class="below-the-fold"> 
     {{extended}} 
    </div> 
</script> 

Odpowiedz

29

Myślę, że chciałeś mieć określoną trasę.

this.resource('posts', function() { 
    this.route('post', { path:'/post/:post_id'}) 
}); 

Błąd brzmi jak przechodzą coś w rodzaju „post/12” i nie masz dynamiczny fragment przeznaczony (napisany jako „: post_id”) do „:” jest ważnym punktem, który określa segment dynamiczny.

Zrobione z Ember.js documentation

+0

że było, dziękuję ty! – NealR

+4

Zastanawiam się, dlaczego działa on zgodnie z oczekiwaniami w samouczku wideo, czy może to być nowsza wersja Ember? –

+1

Aby dodać do tego, 'resource' został wycofany w Ember 2.x. Nowsze aplikacje powinny zamiast tego używać 'route'. –

2

Zaakceptowanych odpowiedź pracuje.

Jednak biorąc pod uwagę, gdzie op jest na przykład bardziej poprawne rozwiązaniem jest pozostawienie po sam:

this.resource('posts'); 

i dodać ten poniżej:

this.resource('post', { path: '/post/:post_id'}); 
+0

To nie pomogło mi bezpośrednio, ale wskazuje mi miejsce, w którym miałem trasę dwa razy;) – Mailo

Powiązane problemy