Событие встроенной коллекции Backbone

Я создал модель (см. Делегирование), состоящую из основных атрибутов (имя, действие) и одной коллекции (членов).

См. Jsfiddle

Метод fetch обновляет модель и запускает для нее событие синхронизации, но я хотел бы получать уведомление, когда встроенная коллекция синхронизируется (то есть в реальном случае для визуализации представления, когда синхронизируется внутренняя коллекция).

Я пробовал это

this.listenTo(this.get('members'),'sync',function(){...}

но соответствующее событие никогда не срабатывает.

Как правильно запустить его?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
30
2

Ответы 2

When you execute the fetch function of Backbone, it returns a PROMISE, you can use the function then to launch a function at the moment the fetch is finished, you can also use the catch for when it fails.

Например:

this.model = new Backbone.Model()
this.model.url  = "example"
this.model.fetch().then((data) => { 
    console.info("succes: " + data); // Finished the fetch successfully 
  }).catch((data) =>{ 
    console.info("error: " + data); // The fetch ended in error
  })

Для вашего кода:

Вы можете использовать его в этой части Backbone.Model.prototype.fetch или, если ваша функция выборки возвращает обещание, используйте ее при вызове выборки модели.

Привет, javimovi! Спасибо, что нашли время ответить на мой вопрос. Однако я не уверен, что понимаю ваш ответ и как можно использовать обещание для запуска события? Не могли бы вы дать мне полный пример кода или изменить jsfiddle?

Christian 20.11.2018 00:44

Я не вижу кода, который выбирает коллекцию, поэтому sync не запускается для коллекции. Вам стоит сделать delegation1.get('members').fetch(). Чтобы это работало, у коллекции также должен быть собственный URL.

Здравствуйте, TJ, Спасибо, если я хорошо понимаю, вызова fetch для модели, содержащей коллекцию, недостаточно для правильной выборки самой коллекции? У меня только один URL-адрес, возвращающий как содержимое коллекции, так и дополнительные параметры (как в скрипте) var jsonData = {name: "delegation_2", activity: "design", members: [{firstname: "John", lastname: " DOE "}, {имя:" Жан ", фамилия:" Дюпон "}]}; Должен ли я заниматься этим методом синтаксического анализа или есть метод получше?

Christian 21.11.2018 06:45

«вызова выборки для модели, содержащей коллекцию, недостаточно для правильной выборки самой коллекции» - да, потому что магистраль не поддерживает вложенные структуры из коробки. Если вашему приложению очень нужны такие возможности, возможно, стоит изучить базовые плагины, такие как backbonerelational.org. Если вам нужны только минимальные возможности, вы можете переопределить fetch/save/destroy или sync (для всех) и parse, чтобы добавить свою собственную обработку коллекции - что-то вроде save(){ //your code here; Backbone.model.prototype.save.call(this, arguments);}

T J 21.11.2018 13:32

Или просто сделайте это простым и работайте только с моделью: внутри модели parse создайте коллекцию и добавьте в качестве атрибута модели, затем переопределите метод модели toJSON(), вызовите toJSON() в коллекции, добавьте его к остальным атрибутам модели и верните объединенные данные. структура. В этом случае ваш бэкэнд для модели должен уметь обрабатывать данные модели + коллекции ...

T J 21.11.2018 13:38

Спасибо за направления, попробую второе решение. Backbonerelational переоценивает мои потребности.

Christian 21.11.2018 17:24

Другие вопросы по теме