Nano Hash - криптовалюты, майнинг, программирование

Вызов Map для объекта модели ничего не возвращает

У меня возникла проблема с преобразованием моего объекта модели в приложение Ember.

У меня есть маршрут calendar, который определяет такую ​​модель.

this.store.findAll('competency');

Я пытаюсь преобразовать данные, возвращаемые из этого, в метод контроллера calendarItems, который определен как свойство.

Что я хотел бы сделать, так это взять мою модель и вызвать на ней функцию карты, преобразовать объект и вернуть его обратно в качестве свойства.

Я изменил контроллер на ArrayController, чтобы разрешить вызов методов Enumberable, но все равно не повезло. Функция присутствует, когда я могу this.get('model').map

Любые идеи, где я спотыкаюсь? Может быть, мой подход является выходом, но в основном я просто хочу преобразовать модель и представить эти данные в шаблоне.

Заранее спасибо! Райан

Изменить

Это моя логика преобразования, но массив, зарегистрированный в шаблоне, просто [].

export default Ember.Controller.extend({
  calendarItems: Ember.computed('model', function () {
    return this.get('model').map(function(competency) {
      return 1;
    }, this);
  })
});

console.log(this.get('model').get('length'));

возвращает 0, что заставило меня предположить, что у меня нет элементов модели из хранилища, чтобы повторить один, который объяснил бы пустой массив. Однако, если я помещу {{#each}} в шаблон для распечатки моделей, я получу 3 модели.

Изменить

Календарный маршрут

model: 
  return this.store.findAll('competency');
}

Контроллер календаря

calendarItems: Ember.computed('model', function () {
  return this.get('model').map(function(competency) {
    return 1;
  }, this);
})

Шаблон календаря

{{log calendarItems}}
31.08.2015

  • Вам нужно предоставить логику преобразования, которая у вас есть в calendarItems, иначе вы не сможете узнать, что вы сделали неправильно. Кроме того, store.findAll уже возвращает Enumerable, поэтому создание ArrayController вредно, поскольку они удалены в Ember 2.0. 01.09.2015
  • Я добавил преобразование calendarItems в основной текст вопроса, но все еще получаю пустой массив. 01.09.2015
  • console.log(this.get('model').get('length')); в методе возвращает 0, поэтому я предполагаю, что настройка моей модели неверна? 01.09.2015

Ответы:


1

У вас есть два основных варианта.

Во-первых, вычисляемое свойство в модели. Пример из документов:

export default DS.Model.extend({
  firstName: DS.attr(),
  lastName: DS.attr(),

  fullName: function() {
    return this.get('firstName') + ' ' + this.get('lastName');
  }.property('firstName', 'lastName')
});

В шаблоне вы можете использовать его следующим образом:

{{#each model as |item|}}
  {{item.fullName}}
{{/each}}

Во-вторых, вычисляемое свойство в контроллере на основе модели. Пример контроллера:

import Ember from 'ember';

export default Ember.Controller.extend({
  something: Ember.computed('model', function () {
    var ret = [];
    this.get('model').forEach(function(item) {
      ret.push(item.get('something'));
    }, this);

    return ret;
  })
});

Пример шаблона:

{{#each something as |item|}}
  {{item}}
{{/each}}

Также вы можете определить помощника, передать ему каждый элемент и вернуть то, что вам нужно. Подробнее об этом методе здесь

31.08.2015
  • Спасибо, я пришел к выводу, что моя модель отсутствует или загружена в контроллер. Я установил маршрут calendar с помощью return this.store.findAll('competency');, но в контроллере calendar console.log(this.get('model').get('length')); возвращает 0, когда есть три элемента 01.09.2015
  • Пожалуйста, используйте Ember Inspector, чтобы посмотреть, что у вас есть в магазине guides.emberjs.com /v1.13.0/ember-инспектор/установка 01.09.2015
  • Также я предлагаю заглянуть в консоль на наличие ошибок и посмотреть запрос на бэкэнд и ответ на вкладке сети в инструментах разработчика. 01.09.2015
  • Спасибо, в консоли ошибок нет и в магазине есть 3 модели компетенций 01.09.2015
  • Я также получаю все модели в сетевом запросе, как и ожидалось. 01.09.2015
  • Звучит неплохо. Поместите console.log('computing!'); console.log(this.get('model'), this.model); в свое вычисляемое свойство и посмотрите вывод в консоли. 02.09.2015
  • Выглядит, как и ожидалось для меня. Class {store: Class, isLoaded: true, manager: Class, isUpdating: true, __ember1441141826237: null…} Class {store: Class, isLoaded: true, manager: Class, isUpdating: true, __ember1441141826237: null…} Однако такое обновление кажется странным. 02.09.2015
  • Также в консоли присутствует computing!. 02.09.2015
  • Поместите также {{log calendarItems}} в шаблон. Я только что попробовал аналогичный код (вычисленное свойство с использованием карты), и он отлично работает. 02.09.2015
  • Я получаю [] независимо от карты, кажется, что this.model не заполнен элементами магазина. 02.09.2015
  • Не могли бы вы опубликовать свой маршрут, контроллер, модель и шаблон? 02.09.2015
  • добавлено внизу оригинального поста. 02.09.2015
  • model: return this.store.findAll('competency'); } похоже на опечатку, должно быть model: function () { return this.store.findAll('competency'); }. Попробуйте console.log(competency); перед return 1; обратным вызовом внутри карты 02.09.2015
  • Извините, это опечатка, когда я скопировал ее, функция действительно присутствует в коде. Итерации карты не выполняются, так как длина модели равна 0. 02.09.2015
  • Вы продлеваете Ember.Controller или Ember.ArrayController? Должен быть первым 02.09.2015
  • Если вы вставите шаблон {{#each model as |item|}}{{log item}}{{/each}}, вы увидите все 3 элемента в консоли? 02.09.2015
  • Да, получите 3 из Class {store: Class, container: Container, _internalModel: InternalModel, isError: false, error: null…} 02.09.2015
  • В этом случае я не вижу причин, по которым ваше вычисляемое свойство не работает. Должно быть, опечатка где-то в вашем коде. Сделайте перерыв и перепроверьте все позже. Иногда это помогает заметить причину проблемы. 02.09.2015
  • Да, спасибо за помощь! Я посмотрю завтра. 02.09.2015
  • Я переделал всю модель, маршрут, контроллеры и т. д. с помощью CLI, и теперь он работает. Должно быть, я что-то неправильно сгенерировал. Спасибо за ваше время с этим, ваши советы помогли мне добраться до источника проблемы. 02.09.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..