Вы можете использовать шаблон стратегии для такого рода вещей.Для любого отклонения используется словарь, в котором ключи основаны на варианте, а значения являются функцией, вызываемой для этого варианта.
Например, если ваш объект с данными формы имеет такую структуру:
var form = {
"field1": {
type: "text"
value: "foo",
attrs: {...}
},
...
}
Вы можете использовать стратегию для обработки различных типов полей.Ваш словарь стратегий может начинаться так:
var FIELD_STRATEGY = {
"input": function (name, value, attrs) {
// General purpose method for <input>
// Needs type included in attrs
"text": function (name, value, attrs) {
// Constructs an <input type="text">
attrs.type = "text";
return FIELD_STRATEGY.input(name, value, attrs);
},
"option": function (value, label, attrs) {
// Constructs an <option>
},
"select": function (name, options, attrs {
// Constructs a <select>
var opts = options.map(function(opt) {
return FIELD_STRATEGY.option(
null,
opt.value,
opt.label);
}).join("");
var attr_str = Object.keys(attrs).map(function(attr) {
var value = attrs[attr];
return name + '="' + value '"';
}).join(" ");
return '<select name="' + name + '" ' + attr_str + '>' +
opts + '</select>';
}
};
Чтобы использовать его, переберите имена полей и вызовите стратегии на основе типа:
var fields = Object.keys(form).map(function (name) {
var conf = form[name] || {};
var strategy = FIELD_STRATEGY[conf.type];
var rendered = "";
if (strategy) {
rendered = strategy(name, conf.value, conf.attrs);
}
return rendered;
});
Это даст вам окончательные полясписок, содержащий отображаемые строки на основе стратегии для каждого типа поля.