Объект Ember как без сеттеров и геттеров

#ember.js #ember-data #ember-cli

#ember.js #ember-данные #ember-cli

Вопрос:

Я работаю над приложением Ember 2.7 и у меня небольшая проблема. У меня есть компонент, извлекающий атрибуты из сервиса, а затем отображающий их в своих представлениях по мере их обновления. Вот часть фактического кода (я знаю, что этот код не имеет смысла с точки зрения цели, но это не главное) :

component.js : это компонент, который извлекает и отображает атрибуты. Этот компонент вызывает методы из службы, предоставляющей данные, которые практически одинаковы (2 массива)

экспорт

 default Ember.Component.extend({
  init() {
    this._super(...arguments);
    this.set('xlsxInput', this.get('newUser').getXlsxInput());
    this.set('bulkNewUsers', this.get('newUser').getBulkNewUsers());
  },
  newUser: Ember.inject.service(),

  actions: {

    processCsvInput() {
      let arrayedCsv = csvToArray.compute(this.get('csvInput'));
      console.log("processCsvInput:", arrayedCsv);
      this.get('newUser').populateBulkNewUsers(arrayedCsv);
      this.get('newUser').setXlsNewUsers(arrayedCsv);
    },
    ...
  

service.js : это сервис, который предоставляет атрибуты и методы

 var emptyNewUser = Ember.Object.extend({
  init() {
    this._super();
  },

  visible: true
});

export default Ember.Service.extend({

  users: Ember.inject.service(),

  bulkNewUsers: [],
  xlsxInput: [],

  arrayToArObj(src, data, _that) {
    _that.get(src).arrayContentWillChange(0, null, data.length);
    var buffer = _that.get(src);
    data.forEach(function(user){
      buffer.push(emptyNewUser.create({
        firstname: user[0],
        lastname: user[1],
        email: user[2]
      }));
    });
    _that.set(src, buffer);
    _that.get(src).arrayContentDidChange();
  },
  populateBulkNewUsers(bulkArray) {
    console.log("empty bulk", this.get('bulkNewUsers'));
    this.get('arrayToArObj')('bulkNewUsers', bulkArray, this);
  },
  setXlsNewUsers(incomingArray) {
    console.log("empty xls", this.get('xlsxInput'));
    this.get('arrayToArObj')('xlsxInput', incomingArray, this);
  },
  ...
  

Таким образом, оба bulkNewUsers и xlsxInput изменяются после прохождения метода arrayToArObj() , но один обновляется в component ( bulkNewUsers ), а другой — нет.

Присмотревшись к атрибутам с помощью консоли.регистрируя их оба, я заметил, что bulkNewUsers у него есть геттеры и сеттеры для каждого из атрибутов его объектов, хотя xlsxInput у него нет никаких геттеров, а не сеттеров, его объекты имеют только три строковых свойства. Я предполагаю, что тот факт, что компонент не может извлекать xslxInputs , происходит из-за отсутствия этих геттеров и сеттеров.

Знаете ли вы, что я сделал не так?

Комментарии:

1. csvToArray — как вы получаете это свойство. он определен глобально ?.,что такое compute ? я хотел бы знать, что он делает ?.. Вы используете bulkNewUsers свойство в шаблоне, но не xlsxInput свойство? я прав ?.

2. Одной из целей приложения является преобразование csv или xls в массивы объектов Ember. этот случай csvToArray не имеет отношения к интересу, он дает только массив. Compute — это метод, который я использую в пользовательском помощнике. Я хочу использовать оба bulkNewsUsers и xlsxInput в своем шаблоне, но после прохождения метода service bulkNewusers обновляется только в шаблоне. Как я уже сказал, после консоли. регистрируя все, я обнаружил, что только геттеры / сеттеры xlsxInput отсутствуют.

3. Покажите нам код getXlsxInput и getBulkNewUsers метод в службе newUser. В то время как вы можете попробовать заменить Ember.computed.alias('newUser.xlsxInput') и Ember.computed.alias('newUser.bulkNewUsers') вместо того, чтобы устанавливать его из метода init.

4. getXlsxInput и getBulkNewUsers являются просто прямыми геттерами, которые только return this.get('getXlsxInput') и return this.get('getBulkNewUsers') . Что касается псевдонима, я собираюсь попробовать! Спасибо

5. Спасибо за ваше предложение, кумканиллам, но мне не повезло, по-прежнему ничего не отображается с использованием псевдонима