Имею базовую системообразующую коллекцию моделей.
Вид, в котором я работаю, отображает информацию о модели, позволяя редактировать.
На рендере моего представления я захватываю модель на основе переданного идентификатора.
render: function() {
this.model = myCollection.get(this.options.passedInId);
// do the render...
}
Затем у меня есть событие щелчка, которое обновляет модель и вызывает рендеринг для повторного рендеринга с обновлениями.
updateModel: function() {
var me = this;
this.model.set('someFlag', true);
this.model.save(this.model.toJSON(), {
success: function(model, resp) {
me.render();
}
}
Моя проблема в том, что когда он возвращается через рендеринг во второй раз, когда get из коллекции возвращает другой экземпляр модели (я вижу на нем другой cId), который не содержит моего измененного свойства someFlag. Поэтому мои правки не отображаются при повторной визуализации представления. Я знаю, что может быть более эффективный способ справиться с этим, но мой вопрос: почему это происходит? Разве модель, полученная из коллекции, не должна включать в себя изменения, которые я внес в эту модель?
Другое дело, что "myCollection" в этом примере, возможно, был сброшен между первоначальным получением и следующим получением после редактирования, но идентификатор все еще присутствует, и он находит только одну модель без каких-либо обновлений.
1 ответ
Моя проблема заключалась в том, что коллекция сбрасывалась между методом рендеринга и методом updateModel.
Это приводит к рассинхронизации модели с коллекцией, чтобы исправить проблему, все, что мне нужно было сделать, это привязать к сбросу и убедиться, что моя модель обновляется до «новой» версии. Я добавил это в свой рендер.
var me = this;
this.collection.on('reset', function () {
me.model = this.get(me.model.id);
};
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
View.initialize(function(args) { this.model = args.model; });
, чтобы просто вызватьthis.model.save()
, а затемthis.render()
, не дожидаясь успешного обратного вызова?cid
моделей будут другими. Находится ли состояние модели в обратном вызове успеха, как вы ожидаете? Вы уверены, что это тот же экземпляр коллекции?