Durandal - удалить модель представления после завершения процесса регистрации

Просто интересно, знает ли кто-нибудь хороший/простой подход с использованием Durandal для удаления или повторной инициализации модели представления, когда она становится недействительной?

У меня есть регистрационная форма, которую я мог бы «повторно инициализировать» вручную после того, как пользователь заполнит форму и успешно зарегистрируется, но я бы предпочел просто избавиться от нее, чтобы Дюрандаль создал новую модель представления/представления регистрации, когда этот конкретный маршрут снова осуществляется доступ.


person Rob    schedule 26.05.2013    source источник


Ответы (4)


Если ваш модуль модели представления возвращает функцию, а не объект, он будет каждый раз создавать новую, а не повторно использовать объект «одиночка». См. раздел Значения модуля документа Создание модуля.

person Dave W    schedule 05.06.2013
comment
Я не всегда хочу воссоздавать его - я хочу воссоздавать только в том случае, если пользователь заполнил регистрационную форму. - person Rob; 05.06.2013

Обновлена ​​ссылка на информацию о функции конструктора модуля Durandal: значения модуля

Вы можете разделить разницу:

var cache;
var ctor = function () {
    if (cache) return cache;
    // init logic
    cache = this;
}

Просто замените проверку if(cache) на любую логику «нужна ли мне новая вещь или нет», которая вам нравится.

person dchanko    schedule 11.04.2014

Если вы используете маршрутизацию, просто перенаправьте пользователя в модуль на основе экземпляра (тот, который возвращает функцию-конструктор). Пользователь, скорее всего, нажмет или коснется кнопки, которая означает, что он закончил с регистрационной формой. Это будет действие перенаправления.

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

Динамическая композиция — это когда атрибуты представления и/или модели в композиции Дюрандаля сами по себе являются наблюдаемыми объектами, ссылаясь на что-то вроде следующего в модели представления:

this.currentView = ko.observable('');
this.currentModel = ko.observable('');

Затем в вашем HTML:

<div>
    <div data-bind="compose: {view: currentView(), model: currentModel())"></div>
</div>

Когда пользователь нажимает «Готово» или что-то в этом роде, функции в вашей модели просмотра могут выглядеть примерно так:

ctor.prototype.done = function () {
    this.setCurrentView('viewmodels/registrationForm.html');
    this.setCurrentModel('viewmodels/registrationForm.js');
}

ctor.prototype.setCurrentView = function (view) {
    this.currentView(view);
}

ctor.prototype.setCurrentModel = function (model) {
    this.currentModel(model);
}

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

person Community    schedule 12.04.2014

В Durandal 2.0 вы можете использовать обратный вызов деактивации в жизненном цикле композиции. Вот некоторая документация http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks.

person Justin Nafe    schedule 07.05.2014