2013-09-05 46 views
13

tôi dường như không thể theo dõi nguồn gốc của lỗi này:Ember 1.0.0 RESTAdapter thất bại

Assertion failed: No model was found for '0'

Các JSON là nhận lấy bởi máy chủ, nhưng ứng dụng được erroring ra trước khi nó được gửi đến bản mẫu. Vấn đề dường như đang xảy ra giữa bộ điều hợp REST và bộ định tuyến. Các mẫu ám lỗi miễn phí khi tôi sử dụng bộ điều hợp lịch thi đấu.

Tôi đang sử dụng các phiên bản Ember và Handlebars 1.0.0.

Đây là mã App của tôi:

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() 
}); 

tay lái mẫu

<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> 

Nhờ sự giúp đỡ của bạn!

Trả lời

25

Phản hồi từ máy chủ có thể không được định dạng chính xác. JSON cần phải có một gốc có cùng tên với mô hình của bạn. Xem: http://emberjs.com/guides/models/the-rest-adapter/#toc_json-root phản ứng của bạn cần phải tìm kiếm một cái gì đó như thế này:

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

Định dạng JSON không phải là vấn đề. Khi tôi dán các phản ứng vào một biến và sử dụng mà thay vì nhận được nó từ máy chủ tất cả là tốt. –

+0

Thú vị. Tôi đã nhận được rằng cùng một lỗi, và thêm một gốc để phản ứng json cố định nó cho tôi. Tôi không chắc những gì khác gây ra lỗi đó. –

+2

Aha - Tôi đã sai, JSON là vấn đề, như bạn đã đề xuất. Tôi cần sử dụng Active Model Serializer trong Rails để thỏa mãn phần mềm Ember RESTAdapter. Được cảnh báo! –

0

Trong bạn bindAttr bạn đang sử dụng các đối tượng story do đó bạn nên thay đổi {{#each}} helper của bạn để làm tài liệu tham khảo đến đối tượng đó:

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

Hy vọng nó giúp.

+0

Ý tưởng hay nhưng vấn đề dường như là với bộ điều hợp hoặc bộ định tuyến, không phải mẫu. –

0

tôi nhận được một lỗi tương tự khi chuyển từ một mở rộng FixtureAdapter một mở rộng RESTAdapter. Tôi đã ghi đè một trong số các phương thức finder.

Trong khi có những FixtureAdapter đã hoàn toàn hài lòng với một mảng của các đối tượng

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); 
     }) 
    }); 
} 

cho cùng một phương pháp RESTAdapter mong đợi một đối tượng với phím và mảng như giá trị

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); 
    }); 
}, 

Thấy sự khác biệt trong cuộc gọi của resolve.

Ngay cả khi nó hoạt động để đặt đối tượng vào mảng như trong FixtureAdapter, điều này sẽ dẫn đến lỗi Assertion failed: You must use Ember.set() to access this property sau này khi bạn cố gắng thay đổi thuộc tính đối tượng.

Đối với tất cả điều này, tôi đang sử dụng Ember 1.2.0, Dữ liệu Ember: 1.0.0-beta.7 + canary.b45e23ba.

Hy vọng điều này sẽ giúp ...

Các vấn đề liên quan