Я создаю виджет мастера с Durandal, и я хотел бы использовать его так:
<div data-bind="wizard: options">
<!-- Step 1 -->
<span data-part="step-header-1">
Step 1
</span>
<div data-part="step-content-1">
step content here
</div>
<!-- Step 2 -->
<span data-part="step-header-2">
Step 2
</span>
<div data-part="step-content-2">
step content here
</div>
</div>
Это фактический виджет (урезанный для краткости):
<div class="wizard-container">
<ul class="steps" data-bind="foreach: steps">
<li>
<span data-bind="html: heading"></span>
</li>
</ul>
<!-- ko foreach: steps -->
<div class="wizard-step" data-bind="css: { active: isActive }">
<div data-bind="html: content">
</div>
</div>
<!-- /ko -->
</div>
Я как бы заставил его работать, используя jQuery, чтобы захватить части данных, назначить внутренний HTML части данных свойству моей пошаговой модели, а затем использовать привязку html для привязки содержимого к каждому шагу. Это работает на стороне DOM, но это означает, что содержимое моего шага не будет привязано к данным. Я почти уверен, что это потому, что я использую привязку html, которая не привязывает содержимое.
Есть ли способ сделать это с виджетами Durandal, не разделяя каждый шаг на новое представление?
[data-part^='step-content']
, это дает мне все части содержимого шага, определенные пользователем виджета. Затем я перебираю их, создавая объектStep
для каждого шага, и назначаюstep.content = $thisStepContent.html()
— как только я настроил все шаги, Durandal визуализирует представление, используя привязку foreach для создания заголовков и содержимого моих шагов. У меня есть /widgets/wizard/view.html и viewmodel.js, которые заботятся о рендеринге моего мастера — сами шаги определяются при каждом использовании виджета мастера. - person Jeff   schedule 18.09.2013