Я работаю над SPA, используя Durandal, и создал виджет для отображения конкретного компонента страницы. После Durandal Documentation виджет находится в app/widgets/my-widget
и состоит из viewmodel.js
и view.html
.Durandal Widget с несколькими видами
Теперь я хочу добавить другое представление к тому же самому виджету - по сути, иметь «основное» представление и «расширенный» вид с флагом в ViewModel, для которого он будет использоваться.
Я не хочу создавать два разных виджета, потому что ViewModel точно такой же, и я хочу избежать ненужного дублирования кода. Я также не хочу ставить обе версии представления в view.html
и просто показывать один или другой на основе флага в ViewModel, потому что это быстро станет кошмаром для поддержки, поскольку функции добавляются в виджет позже.
Я бы подумал, что один ответ должен сделать какой-то View Composition, где имя вида, которое должно быть составлено, возвращается из ViewModel на основе флага, но я не совсем уверен, как это сделать.
У кого-нибудь есть способ сделать это? Есть ли другой способ, которым я должен приближаться к этой проблеме?
UPDATE Вот пример того, что я хочу сделать. Существует виджет workitem
, который используется для отображения «Рабочие элементы». В ViewModel рабочий элемент имеет свойство status
, которое может принимать значения ready
, in-progress
, complete
, или invalid
. В зависимости от статуса рабочего элемента информация, которая должна отображаться о нем (и, следовательно, его вид), совершенно другая. То, что я хочу сделать, это создать что-то вроде этого:
-widgets
|
|-workitem
| |-viewmodel.js
| |-view-ready.html
| |-view-in-progress.html
| |-view-complete.html
| |-view-invalid.html
..., а затем автоматически выбрать один из этих представлений, основанных на собственности в ViewModel.
Почему виджет, а не просто нормальный вид? Кажется, есть методы для этого с представлениями, но я не уверен, что они применимы к виджетам. – CodingGorilla
@CodingGorilla Это виджет по двум причинам: 1. Он имеет независимое от самой страницы состояние и поэтому имеет свой собственный ViewModel. 2. На странице может быть более одного, каждый * со своим независимым состоянием *. –