我多次组成相同形式在相同的模块视图,但是当我改变一个字段中的数据反映在每一个形式。
下面是一些清理代码。 正如你可以看到我确信不使用Singleton模式,因为我要撰写多次形式...
view.html
<button data-bind="click: append">Append</button>
<div data-bind="foreach: odbcForms">
<div data-bind="compose: { model: $data, activationData: settings }"></div>
</div>
viewmodel.js
define(['knockout', 'forms/odbc'], function ( ko, odbcForm) {
var odbcForms = ko.observableArray()
var append = function () {
odbcForms.push(new odbcForm({ hostname: 'v1', db: 'v2' }));
};
return {
odbcForms: odbcForms,
append: append
}
}
表格/ odbc.html
<div>
<form class="form-horizontal" role="form">
<fieldset>
<div class="form-group" data-bind="validationElement: hostname">
<label for="hostname" class="col-sm-2 control-label">ODBC Link Name</label>
<div class="col-xs-4">
<input data-bind="value: hostname" type="text" class="form-control" id="hostname">
</div>
</div>
<div class="form-group" data-bind="validationElement: db">
<label for="db" class="col-sm-2 control-label">Database</label>
<div class="col-xs-4">
<input data-bind="value: db" type="text" class="form-control" id="db">
</div>
</div>
</fieldset>
</form>
</div>
表格/ odbc.js
define(['knockout'], function(ko) {
var ctor = function (settings) {
this.settings = settings;
};
ctor.prototype = {
constructor: ctor,
activate: function (settings) {
this.hostname(this.settings.hostname);
this.db(this.settings.db);
},
hostname: ko.observable().extend({
required: true,
minLength: 2
}),
db: ko.observable().extend({
required: true,
minLength: 2
}),
};
return ctor;
}
先感谢您