#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
в своем шаблоне, но после прохождения метода servicebulkNewusers
обновляется только в шаблоне. Как я уже сказал, после консоли. регистрируя все, я обнаружил, что только геттеры / сеттеры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. Спасибо за ваше предложение, кумканиллам, но мне не повезло, по-прежнему ничего не отображается с использованием псевдонима