Я создал модель (см. Делегирование), состоящую из основных атрибутов (имя, действие) и одной коллекции (членов).
Метод fetch обновляет модель и запускает для нее событие синхронизации, но я хотел бы получать уведомление, когда встроенная коллекция синхронизируется (то есть в реальном случае для визуализации представления, когда синхронизируется внутренняя коллекция).
Я пробовал это
this.listenTo(this.get('members'),'sync',function(){...}
но соответствующее событие никогда не срабатывает.
Как правильно запустить его?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


When you execute the
fetchfunction of Backbone, it returns a PROMISE, you can use the function then to launch a function at the moment thefetchis finished, you can also use thecatchfor 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 или, если ваша функция выборки возвращает обещание, используйте ее при вызове выборки модели.
Я не вижу кода, который выбирает коллекцию, поэтому sync не запускается для коллекции.
Вам стоит сделать delegation1.get('members').fetch(). Чтобы это работало, у коллекции также должен быть собственный URL.
Здравствуйте, TJ, Спасибо, если я хорошо понимаю, вызова fetch для модели, содержащей коллекцию, недостаточно для правильной выборки самой коллекции? У меня только один URL-адрес, возвращающий как содержимое коллекции, так и дополнительные параметры (как в скрипте) var jsonData = {name: "delegation_2", activity: "design", members: [{firstname: "John", lastname: " DOE "}, {имя:" Жан ", фамилия:" Дюпон "}]}; Должен ли я заниматься этим методом синтаксического анализа или есть метод получше?
«вызова выборки для модели, содержащей коллекцию, недостаточно для правильной выборки самой коллекции» - да, потому что магистраль не поддерживает вложенные структуры из коробки. Если вашему приложению очень нужны такие возможности, возможно, стоит изучить базовые плагины, такие как backbonerelational.org. Если вам нужны только минимальные возможности, вы можете переопределить fetch/save/destroy или sync (для всех) и parse, чтобы добавить свою собственную обработку коллекции - что-то вроде save(){ //your code here; Backbone.model.prototype.save.call(this, arguments);}
Или просто сделайте это простым и работайте только с моделью: внутри модели parse создайте коллекцию и добавьте в качестве атрибута модели, затем переопределите метод модели toJSON(), вызовите toJSON() в коллекции, добавьте его к остальным атрибутам модели и верните объединенные данные. структура. В этом случае ваш бэкэнд для модели должен уметь обрабатывать данные модели + коллекции ...
Спасибо за направления, попробую второе решение. Backbonerelational переоценивает мои потребности.
Привет, javimovi! Спасибо, что нашли время ответить на мой вопрос. Однако я не уверен, что понимаю ваш ответ и как можно использовать обещание для запуска события? Не могли бы вы дать мне полный пример кода или изменить jsfiddle?