2

У меня возникла проблема понять, как работать с моделями ember-data в моих представлениях и контроллерах. Я пишу приложение, используя emberjs 1.2.0 + ember-data 1.0.0-beta.2. Я пишу свой собственный RESTAdapter и Serializer для нашего (сумасшедшего) API. Кажется, что все работает нормально - я могу работать с данными модели в моих шаблонах и так далее.Данные Ember: работа с моделью в контроллерах/представлениях

Я попытаюсь объяснить базовую функциональность приложения. Например, у меня есть UserModel с коллекцией пользователей, и у меня есть шаблон для списка пользователей и деталей пользователя, где вы можете редактировать профили и так далее. Там все чисто. Тогда у меня есть еще один вызов модели Местоположение с последним местоположением, связанным с пользователем. Эта модель, которую я использую в своем шаблоне с картами Google, где мне нужно использовать эту модель (в моем mapView) для создания аннотаций на карте. Другим примером является reportModel с дневной статистикой активности пользователя. В этой модели мне нужно построить диаграммы dc.js с этими статистическими данными. Без данных ember-данных я в основном устанавливаю ajaxRequest в крюке модели Route, и я могу указать get данные в моем контроллере или на просмотр. Я пытаюсь использовать этот маршрут для использования данных ember как остальное приложение, но я действительно не знаю, как получить данные модели в представлении или контроллере, когда get ('model') возвращает класс DS.Model.

Немного кода: журнал

App.DashboardRoute = App.AuthenticatedRoute.extend({ 
    model: function() { 
     return this.store.find('daystat'); 
    }, 
    setupController: function(controller, model) { 
     controller.set('content', model); 
    } 
}); 

App.DashboardView = Ember.View.extend({ 
    didInsertElement: function() { 

     // load model from controller 
     var model = this.get('controller.content'); 

     console.log(model); 
    } 
}); 

консоли на приборной панели маршрута:

Class 
__ember1391503821834: "ember608" 
__ember1391503821834_meta: Meta 
_oldWillDestroy: function superWrapper() { 
_super: undefined 
arrangedContent: (...) 
content: (...) 
get content: function() { 
set content: function (value) { 
isLoaded: true 
isUpdating: false 
store: Class 
toString: function() { return ret; } 
type: App.Daystat 
willDestroy: function superWrapper() { 
__proto__: Object 

Отдых Serializer журнала до нажатия ответа апи для хранения с данными, которые я точно хочу работать в Dashboard Вид:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, nextObject: function, firstObject: undefined, lastObject: undefined, contains: function, getEach: function…] 

Отдельный объект (дата) содержит следующие данные:

date: "2014-01-18" 
id: 4 
orders_count: 0 
orders_sum: 0 
sales_count: 0 
sales_sum: 0 
visits_count: 0 
__proto__: Object 

Мой вопрос: как я могу работать с моделями Ember-Data в моих взглядах и контроллеров, как я в моих рулей шаблонов?

ответ

1

Ok, после того, как некоторое время, потраченное прибегая к помощи и тестирование Я имею общее представление о решении:

Прежде всего, это может помочь всем, кто имеет дело с подобной проблемой: Ember: How to set controller model for use in select view

В моих взглядах Я имею дело с коллекцией, так что я просто сделали небольшой тест журнала код пользовательской настройки приложения, как это:

App.MapController = Ember.ArrayController.extend({ 
    getLocations: function() { 
     var model = this.get('content'); 

     model.forEach(function(item) { 
      console.log(item.get('id')); 
     }); 
    } 
}); 

App.MapView = Ember.ContainerView.extend({ 

    elementId: 'map-canvas', 
    tagName: 'div', 

    attributeBindings: ['style'], 

    map: null, 

    didInsertElement: function() { 
     var mapOptions = { 
      center: new google.maps.LatLng(49.678293, 15.446777), 
      zoom: 8, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     var map = new google.maps.Map(this.$().get(0),mapOptions); 
     this.set("map",map); 

     // Get controller 
     var controller = this.get('controller'); 

     controller.getLocations(); 
    } 
}); 

Log возвратных идентификаторы:

2 combined-scripts.js:357 
3 combined-scripts.js:357 
... 

Так что да, вы можете получить его, используя метод get для каждого свойства.

+0

Я написал приложение для отображения данных ember-data-map-demo с аналогичной логикой: https://github.com/turboMaCk/ember-data-map-demo –

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