【发布时间】:2014-06-16 19:29:57
【问题描述】:
我在同一个模块视图中多次编写同一个表单,但是当我更改一个字段中的数据时,它会反映在每个表单上。
这是一些清理后的代码。如您所见,我确保不要将单例模式用于我想要多次编写的表单...
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
}
}
forms/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>
forms/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;
}
提前谢谢你
【问题讨论】:
-
你应该考虑使用小部件来处理这种事情durandaljs.com/documentation/Creating-A-Widget.html
-
我试过但同样的问题。我正在使用它来将表单动态附加到 view.html :
widget.create(document.getElementById("odbc-forms-" + appendClickCount()), { kind: 'odbcForm', hostname: '', db: '' });
标签: knockout.js durandal knockout-2.0