为了更好地支持我的评论,我正在写这个答案。
您需要做的是提供一种逐步收集数据的机制。将 HTML 复制到其他元素中并不是一种非常灵活的方法。
我创建了一个jsfiddle 来演示这个想法。它远非完美,但在这个阶段它可以工作而不会使事情变得复杂。
基本思想是有一个对象来控制用户需要处理的视图(步骤)的流程。每个视图都有一个与之关联的控制器来处理数据。
观点。
<div id="step1" class="view">
<h3>Step #1</h3>
<input type="text" name="name" value="" />
</div>
<div id="step2" class="view">
<h3>Step #2</h3>
<input type="text" name="title" value="" />
</div>
<div id="step3" class="view">
<h3>Step #3</h3>
<input type="text" name="message" value="" />
</div>
控制流程的对象(仅显示最相关的部分)。
var flow = {
...
settings:{}, // settings to save
routes: [
{controller:Step1Ctrl, element:'#step1'},
{controller:Step2Ctrl, element:'#step2'},
{controller:Step3Ctrl, element:'#step3'}
],
...
show: function (index) {
var route = this.routes[index];
if (this.currentController) {
this.currentController.commit();
}
this.index = index;
this.currentController = new route.controller(
this.settings,
route.element
);
}
};
每次显示新视图时,当前控制器都会提交更改settings
并为当前视图创建一个新控制器。
一个简单的控制器可以如下所示。
function Step1Ctrl(settings, element) {
var $e = $(element).find('input[name="name"]');
$e.val(settings.name); //set the initial value
this.commit = function () {
settings.name = $e.val(); //save
};
}
由于现在每个控制器都提交了更改,settings
因此可以轻松地以您喜欢的任何方式表示该数据。小提琴只是提醒收集的数据,但您可以轻松创建另一个视图和另一个控制器来显示这些设置。
此外,因为每个控制器都可以访问设置,所以它可以对已经存在的值进行操作,或者检查设置组合是否可能。