2013-09-05 7 views
13

मैं इस त्रुटि के स्रोत को ट्रैक नहीं कर पा रहे:एंबर 1.0.0 RESTAdapter विफलता

Assertion failed: No model was found for '0'

JSON सर्वर द्वारा प्राप्त किए गए हो रही है, लेकिन एप्लिकेशन बाहर erroring है इससे पहले कि यह करने के लिए भेजा जाता है नमूना। ऐसा लगता है कि आरईएसटी एडाप्टर और राउटर के बीच समस्या हो रही है। जब मैं स्थिरता एडाप्टर का उपयोग करता हूं तो टेम्पलेट त्रुटि मुक्त प्रदान करता है।

मैं एंबर और Handlebars संस्करणों 1.0.0 का उपयोग कर रहा हूँ।

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

Handlebars टेम्पलेट्स

आपकी मदद के लिए
<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> 

धन्यवाद:

यहाँ मेरी अनुप्रयोग कोड है!

उत्तर

25

सर्वर से प्रतिक्रिया शायद सही ढंग से स्वरूपित नहीं है। JSON को रूट होना जरूरी है जो आपके मॉडल के समान नाम है। देखें: http://emberjs.com/guides/models/the-rest-adapter/#toc_json-root आपकी प्रतिक्रिया कुछ इस तरह ही नज़र आना चाहिए:

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

जेएसओएन का स्वरूपण समस्या नहीं है। जब मैं एक चर में प्रतिक्रिया पेस्ट करता हूं और सर्वर से इसे प्राप्त करने के बजाय इसका उपयोग करता हूं तो सब ठीक है। –

+0

दिलचस्प। मुझे वही त्रुटि मिल रही थी, और जेसन प्रतिक्रिया में जड़ जोड़ने से यह मेरे लिए तय हो गया। मुझे यकीन नहीं है कि उस त्रुटि का और क्या कारण है। –

+2

आहा - मैं गलत था, जैसा कि आपने सुझाव दिया था, जेएसओएन समस्या थी। मुझे picky Ember RESTAdapter को संतुष्ट करने के लिए रेल में सक्रिय मॉडल सीरिएलाइज़र का उपयोग करने की आवश्यकता थी। चेतावनी दी! –

0

में अपने bindAttr आप वस्तु story उपयोग कर रहे हैं इसलिए आप अपने {{#each}} सहायक बदलना चाहिए कि वस्तु के संदर्भ बनाने के लिए:

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

आशा है कि यह मदद करता है।

+0

अच्छा विचार लेकिन समस्या एडाप्टर या राउटर के साथ प्रतीत होती है, टेम्पलेट नहीं। –

0

मैं जब एक विस्तारित RESTAdapter के लिए एक विस्तृत FixtureAdapter से स्थानांतरण एक समान त्रुटि मिली। मैं finder - विधियों में से एक को ओवरराइट कर रहा था।

जबकि वहाँ FixtureAdapter वस्तुओं

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

एक ही विधि RESTAdapter के लिए की एक सरणी की उम्मीद मूल्य के रूप में कुंजी और सरणी के साथ एक वस्तु के साथ पूरी तरह से खुश था

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

भीतर अंतर देखें resolve का कॉल।

यहां तक ​​कि यह FixtureAdapter में तरह सरणी में एक वस्तु डाल करने के लिए काम करता है, इस Assertion failed: You must use Ember.set() to access this property जब आप वस्तुओं के गुण परिवर्तित करने का प्रयास पर बाद में त्रुटि का परिणाम देगा।

इस सब के लिए, मैं एंबर 1.2.0 का उपयोग कर रहा हूँ, एंबर डाटा: 1.0.0-beta.7 + canary.b45e23ba।

उम्मीद है कि यह मदद करता है ...

संबंधित मुद्दे