2016-02-13 2 views
1

В моем приложении данные в одной модели являются «мета» по своей природе и определяют атрибуты в другой модели. Представьте себе получение базы данных, где данные определения столбца определяют атрибуты каждой строки.Как повторно инициализировать модель данных ember-данных

Я могу reopen() модель строки, пока я еще не запросил строки из магазина. Последующий вызов store.findAll('row') извлекает данные со всеми атрибутами.

Если, однако, я уже звонил store.findAll('row') до Column.reopen(), то я не могу найти способ заставить хранилище подтвердить новые атрибуты.

Я пытался без успеха:

  • разгрузки всех строк и найти их снова
  • вызова peekAll/обновления на строках уже в магазине
  • вызывающего Ember.defineProperty() на модели ряда вместо вновь открыть ,

Как существующие, так и последующие новые строки не получают новые атрибуты.

+0

Это не то, как работают данные ember. Его сильно набрали. Может использовать модель 'field' с атрибутами' name' и 'value'. – Lux

+0

Спасибо за идею. Я сомневаюсь, что это будет масштабироваться, даже если бы я мог заставить их загрузить одну транзакцию с помощью 'hasMany'. Ember уже слишком медленный для моего приложения. Если на мой вопрос нет ответа (кроме «не делай этого»), я думаю, что мой лучший вариант - связать динамические атрибуты с одним строковым атрибутом и обработать их за пределами данных ember-данных или выбросить ember- данных вообще. –

+0

Возможно, лучший способ задать свой вопрос: я могу повторно инициализировать весь магазин, но предпочел бы просто (повторно) инициализировать одну модель. –

ответ

1

Решение, которое работает для меня:

let store = this.get('store'); 

    Ember.getOwner(store).unregister('model:item'); 
    Item.reopen(newAttributes); 
    Ember.getOwner(store).register('model:item', Item); 

    let currentRoute = this.get('currentRoute'); 
    if (currentRoute) { 
    currentRoute.refresh(); 
    } 

зарегистрировать маршрут с сервисом, который обновляет схему. Когда обнаружено изменение схемы (которое я отказываюсь избегать обмолота), я отменяю регистрацию модели, обновляю ее повторно, перерегистрирую и обновляю маршрут. Возможно, есть способ заставить магазин отразить эти изменения, не обновляя маршрут, но я не смог его найти.

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