2013-09-05 18 views
13

I nie może wydawać się wyśledzić źródło tego błędu:Ember 1.0.0 RESTAdapter awaria

Assertion failed: No model was found for '0'

JSON jest coraz pobierane przez serwer, ale aplikacja jest erroring się zanim zostanie wysłany do szablon. Wydaje się, że problem występuje między adapterem REST a routerem. Szablon renderuje się bezbłędnie, gdy używam adaptera urządzenia.

Używam Ember i Handlebars w wersji 1.0.0.

Oto mój kod aplikacji:

window.App = Ember.Application.create(); 

App.ApplicationAdapter = DS.RESTAdapter.extend({ 
    host: 'http://localhost:3000' 
}); 

App.Router.map(function() { 
    this.resource("stories", { path: "/" }, function() { 
     this.resource("boards", { path: "/boards"}) 
    }); 
}); 

App.StoriesRoute = Ember.Route.extend({ 
    model: function() { 
     return this.store.findAll('story'); 
    } 
}); 

attr = DS.attr; 

App.Story = DS.Model.extend({ 
    color: attr() 
}); 

Kierownica szablony

<script type="text/x-handlebars"> 
    {{ outlet }} 

    </script> 

    <script type="text/x-handlebars" data-template-name="stories"> 
    <ul> 
     <li class="storyLine"> 
      <ul> 
       <li id="colorSwatch"></li> 
       <li class="board">+</li> 
      </ul> 
     </li> 
    </ul> 
    <ul> 
    {{#each model}} 
     <li class="storyLine"> 
      <ul> 
       <li id="colorSwatch" {{bindAttr class=story.color}}></li> 
       <li class="board">dddd</li> 
      </ul> 
     </li> 
    {{/each}} 
    </ul> 
    </script> 

dzięki za pomoc!

Odpowiedz

25

Odpowiedź z serwera prawdopodobnie nie jest poprawnie sformatowana. JSON musi mieć root, który ma taką samą nazwę jak twój model. Zobacz: http://emberjs.com/guides/models/the-rest-adapter/#toc_json-root Twoja odpowiedź powinna wyglądać mniej więcej tak:

{ 
    "story": [ 
    { 
     "id": 0, 
     "title": "foo" 
    }, 
    { 
     "id": 1, 
     "title": "bar" 
    } 
    ] 
} 
+1

Formatowanie JSON nie jest problemem. Kiedy wkleję odpowiedź do zmiennej i używam jej zamiast odbierać ją z serwera, wszystko jest w porządku. –

+0

Interesujące. Otrzymałem ten sam błąd, a dodanie korzenia do odpowiedzi jsona naprawiło to dla mnie. Nie jestem pewien, co jeszcze powoduje ten błąd. –

+2

Aha - Myliłem się, JSON był problemem, jak sugerowałeś. Musiałem użyć Active Model Serializer w Railsach, aby zadowolić wybrednego Ember RESTAdapter. Być ostrzeżonym! –

0

w twojej bindAttr używasz obiektu story dlatego należy zmienić {{#each}} pomocnika odnieść się do tego obiektu:

... 
{{#each story in model}} 
    <li class="storyLine"> 
    <ul> 
     <li id="colorSwatch" {{bindAttr class=story.color}}></li> 
     <li class="board">dddd</li> 
    </ul> 
    </li> 
{{/each}} 
... 

nadzieję, że to pomaga.

+0

Przyjemna myśl, ale problem wydaje się być związany z adapterem lub routerem, a nie z szablonem. –

0

mam podobny błąd podczas przechodzenia z rozszerzonym FixtureAdapter do rozszerzonego RESTAdapter. Nadpisałem jedną z metod - finder.

Chociaż tam FixtureAdapter był całkowicie zadowolony z tablicą obiektów

findQuery: function(store, type, query, array) { 
    return DS.PromiseArray.create({ 
     promise: new Promise(function(resolve, reject){ 
      var results = []; 
      store.findAll('source').then(function(sources) { 
       sources.forEach(
        function (rootSource) { 
         results.push(store.createRecord(...)); 
        } 
       ); 
       resolve(results); 
      },reject); 
     }) 
    }); 
} 

dla tej samej metodzie RESTAdapter oczekiwany obiekt z klucza i tablicy jako wartość

findQuery: function(store, type, query, array) { 
    return new Ember.RSVP.Promise(function(resolve, reject){ 
     var results = []; 
     store.find('source').then(function(sources) { 
      sources.forEach(
       function (rootSource) { 
        results.push({ ... }); 
       } 
      ); 
      resolve({"connections":results}); 
     },reject); 
    }); 
}, 

Zobacz różnicę w obrębie zadzwoń pod numer resolve.

Nawet jeśli wstawia obiekt do tablicy, tak jak w przypadku FixtureAdapter, spowoduje to późniejszy błąd przy próbie zmiany właściwości obiektów.

Do tego wszystkiego używam Ember 1.2.0, Ember Data: 1.0.0-beta.7 + canary.b45e23ba.

Mam nadzieję, że to pomoże ...

Powiązane problemy