2013-01-05 28 views
6

का उपयोग करना:एंबेडेड hasMany विशेषता पहुँच देता है "लेखन त्रुटि: विधि अपरिभाषित की 'hasOwnProperty' कॉल नहीं कर सकता"

this question ('Unable to get hasMany association') की तरह, मैं असमर्थ हूँ एम्बेडेड तक पहुंचने के लिए बहुत सारे रिकॉर्ड सीधे हैं लेकिन मॉडल की सामग्री विशेषता के माध्यम से उन्हें देख सकते हैं।

JSON के लिए:

{ 
    "ref_book_search":{ 
     "query":"har", 
     "results":[ 
     { 
      "publisher":{ 
       "name":"Pangolin", 
       "created":"2012-09-10T18:38:27.259515", 
       "id":"3d2028e4fb91181e1a6ef821", 
       "is_active":true, 
       "main_url":null, 
       "resource_uri":"/api/v1/ref_publisher/3d2028e4fb91181e1a6ef821" 
      }, 
      "genre":"romcom", 
      "id":"cc671f00fc2711e1e41612313914f821", 
      "resource_uri":"/api/v1/ref_book/cc671f00fc2711e1e41612313914f821", 
      "title":"Harry Placeholder and the Goblet of PBR" 
     }, 
     { 
      "publisher":{ 
       "name":"Hoof & Mouth", 
       "created":"2012-10-10T14:31:27.259515", 
       "id":"3d200e9afb9811e1a27417383914f821", 
       "is_active":true, 
       "main_url":null, 
       "resource_uri":"/api/v1/ref_publisher/3d200e9afb9811e1a27417383914f821" 
      }, 
      "genre":"horror", 
      "id":"cc621f08fc2711e1b81612313914e821", 
      "resource_uri":"/api/v1/ref_book/cc621f08fc2711e1b81612313914e821", 
      "title":"Harvey Weinstein Holiday Cookbook" 
     } 
     ] 
    } 
} 

और app.js (ध्यान दें नक्शा बयान है, जो समाधान से पहले प्रश्न में सुझाव दिया गया):

var App = Ember.Application.create(); 

DS.RESTAdapter.configure("plurals", {"ref_book_search" : "ref_book_search"}); 

App.store = DS.Store.create({ 
    revision: 11, 
    adapter: DS.RESTAdapter.create({ 
    bulkCommits: false, 
    namespace: "api/v1" 
    }) 
}); 

DS.RESTAdapter.map('App.RefBookSearch', { 
    primaryKey: 'query' 
}); 

App.store.adapter.serializer.map('App.RefBookSearch', { 
    results: {embeddded: 'load'} 
}); 

App.store.adapter.serializer.map('App.RefBook', { 
    publisher: {embeddded: 'load'} 
}); 

App.RefPublisher = DS.Model.extend({ 
    name : DS.attr('string'), 
    created : DS.attr('date'), 
    isActive : DS.attr('boolean'), 
    mainUrl : DS.attr('string') 
}); 

App.RefBook = DS.Model.extend({ 
    publisher: DS.belongsTo('App.RefPublisher'), 
    title : DS.attr('string'), 
    genre : DS.attr('string') 
}); 

App.RefBookSearch = DS.Model.extend({ 
    query: DS.attr('string'), 
    results: DS.hasMany('App.RefBook') 
}); 

App.Router.map(function(match) { 
    match('/').to('query'), 
    match('/query/:ref_book_search_id').to('query') 
}); 

App.QueryController = Ember.Controller.extend({ 
    bookSearch: null, 
    results: [] 
}); 

App.QueryRoute = Ember.Route.extend({ 
    setupControllers: function(controller, refBookSearch) { 
    controller.set('bookSearch', refBookSearch) 
    controller.set('results', refBookSearch.get('results').content) 
    } 
}) 

App.initialize(); 

सब कुछ, पहली बार में ठीक लग रहा है जैसे अन्य पोस्टर:

search = App.RefBookSearch.find('ha') 
search.get('query') 
// => "ha" 
results = search.get('results') 
results.get('firstObject') instanceof App.RefBook 
// => true 

लेकिन तब:

results.forEach(function(result) { console.log(result.get('title')) }) 
// => TypeError: Cannot call method 'hasOwnProperty' of undefined 

सामग्री के माध्यम से एक्सेस करना चलता डेटा नहीं है:

results.forEach(function(result) { console.log(result.get('title')) }) 
// => undefined x 2 

यह या नहीं हो सकता: अब

results.content.forEach(function(result) { console.log(result.title) }) 
// => Harry Placeholder and the Goblet of PBR 
// => Harvey Weinstein Holiday Cookbook 

अगर मैं सीधे पुन: पहुंच बनाने का प्रयास करें, मैं एक अलग त्रुटि मिलती है this bug से संबंधित कुछ दिन पहले दायर किया गया था।

मुझे लगता है कि मैंने यहां सब कुछ करने की कोशिश की है; मुझे उम्मीद है कि मैं बस कुछ आसान याद कर रहा हूँ। किसी भी पॉइंटर्स की बहुत सराहना की। धन्यवाद।

उत्तर

4

यह अंततः मेरे लिए काम करता है। ऐसा लगता है कि स्टोर बनाने से पहले कॉन्फ़िगरेशन और मैप कर रहे हैं, कुछ ऑपरेशन ऑफसेट ऑपरेशंसिटी। यह भी ध्यान रखें कि adapter.map एक सुविधा फ़ंक्शन है जो धारावाहिक पर मैपिंग करता है।

App.Adapter = DS.RESTAdapter.extend() 

App.Adapter.configure("plurals", { 
    "ref_book_search" : "ref_book_search", 
    "ref_book" : "ref_book", 
    "ref_publisher" : "ref_publisher" 
}); 

App.Adapter.configure('App.RefBookSearch', { 
    primaryKey: 'query' 
}); 

App.Adapter.map('App.RefBookSearch', { 
    results: {'embedded': 'load'} 
}); 

App.Adapter.map('App.RefBook', { 
    publisher: {'embedded': 'load'} 
}); 

App.store = DS.Store.create({ 
    revision: 11, 
    adapter: App.Adapter.create({ 
    bulkCommits: false, 
    namespace: "api/v1" 
    }) 
}); 
+0

धन्यवाद! इसने मुझे सही समस्या का सामना करना पड़ा। –

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