2015-02-19 2 views
0

У меня возникли проблемы с получением результатов API json, которые будут перенесены в массив моделей объектов Ember Data. Раньше я использовал getJSON на своем маршруте, но теперь мне нужно иметь возможность фильтровать данные по нескольким свойствам, а Ember Data предоставляет встроенные методы для этого ... если бы я мог заставить это работать. Я довольно новичок в этом, поэтому, вероятно, я пропустил что-то ужасное. Пожалуйста, дайте мне знать, если мне не хватает кода для оказания помощи. Когда я смотрю на обещания, он показывает, что они выполняются при извлечении данных из API, но затем он отклоняется при попытке запросить локальное хранилище данных для записей (показывает null), что, на мой взгляд, означает, что мои данные не добавляются в хранилище в первую очередь. Я бы предоставил JSBin, но наш api использует CORS, и я не могу получить подлинность JSbin для аутентификации.Ember.Data JSON не помещается в хранилище

На маршруте я пробовал следующее. Оба бросают различные ошибки:

return this.store.find('restaurant'); 
//returns error: Error while processing route: casualdining 
//Array.prototype.map: 'this' is null or undefined. 

return DineSection.Restaurant.find(); 
//Error while processing route: casualdining 
//Object doesn't support property or method 'find' 

Кодекс Применение:

DineSection = Ember.Application.create({ 
     rootElement: "#dinesection-app" 
    }); 

DineSection.Router.map(function() {   
     this.resource("casualdining"); 
     this.resource("restaurant", { path: "/:id" }); 

    }); 

DineSection.ApplicationAdapter = DS.RESTAdapter.extend({ 
     host: 'https://api.lakecountyfl.gov', 
     namespace: 'api/TourismListings', 
     pathForType: function (type) {    
      return "GetRestaurants"; 
     } 
    }); 

DineSection.ApplicationStore = DS.Store.extend({ 
    adapter: 'DineSection.ApplicationAdapter' 
    }); 

//SERIALIZE OUR JSON DATA FROM THE API into something ember data can use 
    DineSection.ApplicationSerializer = DS.RESTSerializer.extend({ 
     normalizePayload: function (type, payload) { 
      return { restaurant: payload } 
     } 
    }); 

DineSection.Restaurant = DS.Model.extend({  
     name: DS.attr('string'), 
     address: DS.attr('string'), 
     city: DS.attr('string'), 
     zip: DS.attr('string'), 
     phone: DS.attr('string'), 
     website: DS.attr('string'), 
     facebook: DS.attr('string'), 
     flickr: DS.attr('string'), 
     hasphoto: DS.attr('boolean', {defaultValue: false}), 
     outdoordining: DS.attr('boolean', { defaultValue: false }), 
     breakfastprice: DS.attr('string'), 
     lunchprice: DS.attr('string'), 
     dinnerprice: DS.attr('string'), 
     description: DS.attr('string'), 
     primarycategoryname: DS.attr('string'), 
     primarycategoryslug: DS.attr('string'), 
     primarysubcategoryname: DS.attr('string'), 
     primarysubcategoryslug: DS.attr('string'),   
     foodtype: DS.attr('string'), 
     foodtypeid: DS.attr('number'),   
     ranking: DS.attr('number'), 
     region1: DS.attr('boolean', { defaultValue: false }), 
     region2: DS.attr('boolean', { defaultValue: false }), 
     region3: DS.attr('boolean', { defaultValue: false }), 
     region4: DS.attr('boolean', { defaultValue: false }) 
    }); 

DineSection.CasualdiningRoute = Ember.Route.extend({   
    model: function() {   
     //return Ember.$.getJSON("https://devapi.lakecountyfl.gov/api/TourismListings/GetRestaurants");    
     return this.store.find('restaurant'); 
     //return DineSection.Restaurant.find(); 
    } 
}); 

Мой ответ JSON выглядит следующим образом (сокращенно две записи для простоты):

[{ 
"$id": "1", 
"id": 1212, 
"name": "Al's Landing", 
"address": "111 W. Ruby St.", 
"city": "Tavares", 
"zip": "32778", 
"phone": "352-555-8585", 
"website": "http://www.alslanding.com", 
"facebook": "https://www.facebook.com/pages/ALS-landing/110275062350544", 
"flickr": null, 
"hasphoto": true, 
"outdoordining": true, 
"breakfastprice": "N/A", 
"lunchprice": "$10-$20", 
"dinnerprice": "$10-$20", 
"description": "A casual dining atmosphere with an indoor/ outdoor bar and plenty of outdoor lakefront seating.", 
"primarycategoryname": "Dining", 
"primarycategoryslug": "dining", 
"primarysubcategoryname": "Casual Dining", 
"primarysubcategoryslug": "casualdining", 
"foodtype": "American", 
"foodtypeid": 13, 
"ranking": 3, 
"region1": false, 
"region2": false, 
"region3": true, 
"region4": false 
}, 
{ 
"$id": "2", 
"id": 1026, 
"name": "#1 Wok", 
"address": "1080 E. Highway 50", 
"city": "Clermont", 
"zip": "34711", 
"phone": "352-555-2346", 
"website": "", 
"facebook": "", 
"flickr": "", 
"hasphoto": false, 
"outdoordining": false, 
"breakfastprice": "N/A", 
"lunchprice": "Less than $10", 
"dinnerprice": "Less than $10", 
"description": "", 
"primarycategoryname": "Dining", 
"primarycategoryslug": "dining", 
"primarysubcategoryname": "Casual Dining", 
"primarysubcategoryslug": "casualdining", 
"foodtype": "Asian", 
"foodtypeid": 1, 
"ranking": 1, 
"region1": false, 
"region2": false, 
"region3": false, 
"region4": true 
} 
] 

ответ

0

Я думаю, что вам нужно «root» в вашем JSON: [рестораны: {

Смежные вопросы