Изменение позиции диалога Durandal 2.0

В нижней части документации durandal для диалогов/модальных окон (http://durandaljs.com/documentation/Showing-Message-Boxes-And-Modals.html) есть некоторый синтаксис для изменения положения диалога. Диалоговое окно, которое у меня есть, постепенно увеличивается по мере того, как пользователь выбирает материал, поэтому каждый раз, когда делается выбор, я хотел бы вызвать reposition(). Я пробовал следовать вместе с этим:

vm.compositionComplete = function (child, parent, context) {

        var addEditDialog = dialog.getDialog(context.model); // resolves

        // whenever something is selected:
        addEditDialog.context.reposition(vm); // no method 'reposition'

}

Но получаю ошибку - нет функции reposition. Что я делаю неправильно?


person SB2055    schedule 19.06.2014    source источник


Ответы (1)


Вы можете настроить собственный диалоговый контекст, который отвечает на сообщение о репозиции (используя app.trigger() Дюрандаля). Вы бы вызвали сообщение при каком-то событии в вашем диалоге (например, как вы говорите, при выборе материала пользователем).

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

Я выступаю за подход к обмену сообщениями, потому что вы можете захотеть изолировать свою "модель представления выбора" в ее собственной модели представления, а затем скомпоновать ее в свой собственный диалоговый контекст. При таком подходе ваш выбор viewModel и ваш пользовательский диалоговый контекст будут слабо связаны. Таким образом, вы можете использовать выбранную viewModel в другом месте своего кода (и даже иметь какую-то другую viewModel вместо пользовательского диалогового контекста, отвечающую на сообщение о репозиции).

person Community    schedule 19.06.2014
comment
Спасибо за это. Знаете ли вы, почему задокументированный синтаксис не работает? Я бы не хотел вносить здесь существенные изменения :/ - person SB2055; 19.06.2014
comment
Взгляните на это: github.com/BlueSpire/Durandal/pull/362. reposition — это функция версии 2.1. Вы указали, что используете 2.0. - person ; 19.06.2014