Hoy voy a ser bueno y voy a entregar un poco de source code de mi framework. Vamos a ver como hacer un form dinamico en javascript estilo Ext JS usando un poco de DOM y otro de JSON.

Vamos directamente al codigo, primero el source code de un par de metodos utiles.

// utils
function tag(tagName) {
 return document.createElement(tagName);
} 

function div(id) {
 var dom = tag(tagName);
 dom.id = id;
 return dom;
}

function get(id) {
 return document.getElementById(id);
}

Ahora css base para el form.

.form-container {
	border: 1px solid #ccc;
	border-top: none;
}

.form-title {
	background: #ccc;
	height: 22px;
	line-height: 22px;
	font-weight: bold;
	padding-left: 10px;
}

.form-body {
	background: #fff;
}

.form-body-label {
	text-align: left;
	clear: left;
	float :left;
}

.form-body-field-container {
	padding-left: 80px;
	margin-bottom: 4px;
}

.form-body-buttons {
	margin-top: 7px;
	text-align: center;
}

	

Ahora el codigo del widget usando las utilidades. La idea de este widget es que pueda crearse una seccion dentro de un DIV donde podamos dibujar un formulario con titulo y una serie de campos verticales tipo text, combo o checkbox. Obviamente agreguen otros componentes si los necesitan.

/** constructor, canvas es el ID
Form = function(canvas, options) {
	this.canvas = get(canvas);
	this.options = options;	
	this.init();
}

Form.prototype.init = function() {
	this.drawContainer();
	this.drawTitleBar();
	this.drawBody();
}

Form.prototype.drawContainer = function() {
	this.canvas.style.width = this.options.width;
	this.canvas.className = "form-container";
}

Form.prototype.drawTitleBar = function() {
	var titleBar = div("form-title");
	titleBar.className = "form-title";
	titleBar.innerHTML = this.options.title;
	this.canvas.appendChild(titleBar);
}

Form.prototype.drawBody = function() {
	var body = div("form-body");
	body.className = "form-body";
	this.canvas.appendChild(body);

	for (var i = 0; i < this.options.fields.length; i  ) {
		var field = this.options.fields[i];
		var row = div();
		var label = tag("label");
		label.className = "form-body-label";
		label.innerHTML = field.label;
		label.htmlFor = field.id;
		var fieldContainer = div();
		fieldContainer.className = "form-body-field-container";
		var input;
		if (field.type == "input") {
			input = tag("input");
			input.type = "text";
			input.className = "form-body-field-input";
			input.size = field.size;
		} else if (field.type == "checkbox") {
			input = tag("input");
			input.type = "checkbox";
			input.className = "form-body-field-checkbox";
			input.checked = field.checked ? "checked" : "";
		} else if (field.type == "select") {
			input = tag("select");
			input.className = "form-body-field-select";
		}
		if (field.width) {
			input.style.width = field.width;
		}
		input.id = field.id;
		fieldContainer.appendChild(input);
		row.appendChild(label);
		row.appendChild(fieldContainer);
		body.appendChild(row);			
	}

	var buttonsRow = div();
	buttonsRow.className = "form-body-buttons";
	body.appendChild(buttonsRow);
	for (var i = 0; i < this.options.buttons.length; i  ) {
		var config = this.options.buttons[i];
		var button = tag("input");
		button.type = config.type;
		button.value = config.label;
		button.onclick = config.onclick;
		buttonsRow.appendChild(button);
	}

}

Y finalmente la implementacion, hay que recordar que este codigo se tiene que ejecutar DESPUES del que la pagina ha sido cargada, digamos, en el evento ONLOAD del window.

window.onload = init;
function init() {
var config = {
	title: "Mi nuevo formtirijillo", 
	width: "400px", 
	buttons: [{type: "submit", label: "Guardar", onclick: save} ,
	  { type: "button", label: "Cancelar", onclick: cancel} ],
	layout: "vertical",
			fields: [
				 {id: "custId", type: "input", size: "40", label: "Cliente" },
				 {id: "address", type: "input", size: "44", label: "Direccion" },
				 {id: "typex", type: "select", width: "124px", label: "Tipo" },
				 {id: "loyal", type: "checkbox", label: "Es mudo?", checked: 1 }
								]
	};
	var form = new Form("theform", config);
}
function save() {
  alert("save");
}

function cancel() {
  alert("cancel");
}

Y ultimo de todo el codigo html que necesitamos.

<div id="theform"></div>