- DOM es una estructura de árbol simple, donde cada nodo es un elemento de la página web.
- LA CLASE NODE contiene los métodos y las propiedades que controlan los nodos del árbol.
- LA CLASE ELEMENT contenida en clase node, contiene los nodos que forman la página web.
- LOS ELEMENTOS tienen forma de rectángulo y pueden recibir eventos del ratón o del teclado.
- Son: h1, p, table, button, etc..
Aplicación web para modificar el dom
Creamos una nueva aplicación web con el nombre "todo" y cambiamos el contenido html, dart y css por:
todo.dart:
import 'dart:html';
InputElement toDoInput;
UListElement toDoList;
void main() {
toDoInput = query('#to-do-input');
toDoList = query('#to-do-list');
toDoInput.on.change.add(addToDoItem);
}
void addToDoItem(Event e) {
var newToDo = new LIElement();
newToDo.text = toDoInput.value;
toDoInput.value = '';
toDoList.children.add(newToDo);
}
todo.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Todo</title>
<link rel="stylesheet" href="todo.css">
</head>
<body>
<h2>Procrastinator's Todo</h2>
<div>
<input id="to-do-input" type="text" placeholder="What needs to be done?"> </input>
</div>
<div>
<ul id="to-do-list">
</ul>
</div>
<script type="application/dart" src="todo.dart"></script>
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
</body>
</html>
todo.css:
body {
font-family: 'Open Sans', sans-serif;
background-color: WhiteSmoke;
margin: 15px;
}
#to-do-input {
font-family: 'Open Sans', sans-serif;
font-size: 14px;
font-weight: normal;
padding: 5px 0px 5px 5px;
width: 100%;
border: 1px solid Silver;
background-color: White;
}
#to-do-list {
padding:0px;
margin:0px;
list-style-position:inside;
}
#to-do-list li {
padding:5px 0px 5px 5px;
border-bottom: 1px dotted Silver;
}
La aplicación gestiona una lista de tareas pendientes. Puede añadir tareas pero no eliminarlas.
Elementos padres e hijos
- Cada ELEMENTO tiene un sólo padre, que es definitivo y no se puede cambiar.
- Para hacer referencia al padre se usa el comando mielemento.parent.
- Cada ELEMENTO se refiere a sus hijos mediante una lista.
- La lista es una clase dentro del la librería dart:core, que puede ser de tamaño fijo o extensible.
- Los elementos de una lista han de ser definidos con un tipo determinado. Por ejemplo:
- List<String> Cadenas de texto
- List<int> Números enteros
- List<Element> Lista de elementos
- Un ELEMENTO se relaciona con TODOS SUS HIJOS con mielemento.children
- Un ELEMENTO se relaciona con UN HIJO EN CONCRETO con mielemento.children[0]
- La estructura del árbol se puede modificar, añadiendo o eliminando hijos de la lista
- Para añadir un nuevo hijo: mielemento.children.add(newchildren);
Configuración de la página en HTML
La aplicación web todo agrega dinámicamente elementos al DOM de esta forma:
En el archivo todo.html se establece los elementos del DOM:
<h2>Procrastinator's Todo</h2>
<input id="to-do-input" type="text" placeholder="What needs to be done?">
<ul id="to-do-list">
- En el archivo todo.dart, función query() para obtener los elementos del DOM.
- Llamar query () no es gratis, mejor guardar una referencia para usarlo varias veces en toDoInput y toDoList:
toDoInput = query('#to-do-input');toDoList = query('#to-do-list');- Estas variables son del tipo InputElement y UListElement, subclases de ELEMENT.
Registro de un controlador de eventos
- Al teclear un texto y pulsar ENTER, se dispara el evento:
- toDoInput.on.change.add(addToDoItem);
- Esto llama a la función addToDoItem(), que añade el texto a la lista de tareas pendientes.
Acerca de las funciones EventListener
- El argumento pasado al método add () es una función del tipo EventListener que no devuelve ningún argumento,al estar definida en dart:html así definida:
- typedef void EventListener(Event event)
La forma de añadir un controlador de eventos a un elemento es la siguiente.
- El objeto Event procedente de la función EventListener dandole forma.
- Esta acción se guarda en la variable 'e' y contiene información de que elemento provocó la acción y que tipo de acción: void addToDoItem(Event e) {}
- En esta aplicación addToDoItem ignora el objeto 'e' que se le ha pasado.
Agregar un elemento al árbol DOM
El controlador eventos tiene el siguiente código:
void addToDoItem(Event e) {
var newToDo = new LIElement();
newToDo.text = toDoInput.value;
toDoInput.value = '';
toDoList.children.add(newToDo);
}
- Define un nuevo elemento de lista: var newToDo = new LIElement();
- Modifica la propiedad texto de este nuevo elemento: newToDo.text = toDoInput.value;
- Borra el contenido del elemento : toDoInput : toDoInput.value = '';
- Añade a la lista el nuevo elemento : toDoList.children.add(newToDo);




No hay comentarios:
Publicar un comentario