Intense.js – komponenty

Encje mamy już za sobą, ale cóż nam po pustych pojemnikach bez żadnych właściwości? Pora na drugi z trzech filarów frameworka intense: komponenty.

Komponenty we frameworku intense stanowią obiekty utworzone z konstruktora _component, który znajduje się w managerze komponentów. Najprostsza metoda na utworzenie komponentu jest wykorzystanie aliasu intense.component. Przykładowe utworzenie komponentu:

intense.component("test", {
	data: {
		x: 0,
		y: 0
	}
});

Zostanie utworzony w ten sposób komponent o nazwie „test”, posiadajacy dwie dane. Tworzenie nowych komponentów wymaga podania ich nazwy jako pierwszego parametru, oraz obiektu zawierającego właściwość data. Jeżeli zostanie podana sama nazwa komponentu, zastosowany zostanie mechanizm wyszukiwania komponentów po nazwie, bedący częścią managera komponentów. Oprócz własciwości data, konstruktor posiada dodatkowo właściwość inject, zawierającą nazwę lub nazwy komponentów, które powinny być dołączone w momencie dodania komponentu do encji. Mechanizm ten został tak skonstruowany, że jeżeli encja posiada już komponent z listy, to nie zostanie on do niej dodany. Oprócz tej właśćiwosci, konstruktor przyjmuje równiez funkcje inicjalizującą o nazwie init, która może przyjąć dowolną ilość parametrów. Komponent zawierający funkcje inicjalizującą, może zostać utworzony z unikalnymi danymi w postaci obiektu i dodany do encji poprzez jej metode add. Przykładowe użycie zaawansowanej postaci konstruktora komponentów:

var Component = intense.component("test", {
	inject: ["test2"],
	init: function (x, y) {
		this.x = x;
		this.y = y;
	},
	data: {
		x: 0,
		y: 0
	}
});
var obiekt = Component(5,10);

Tak utworzony obiekt komponentu może zostać dodany do encji, która już w momencie powiązania uzyska zmodyfikowane dane, o wartości przekazanej do konstruktora obiektu komponentu. Ostatnią właściwością konstruktora komponentu jest właściwość system, która może zawierać zbiór metod operujących na danych komponentu. Element ten nie jest zalecany w przypadku pracy z architekturą komponentową, jednakże czasem może zaistnieć potrzeba utworzenia unikalnego komponentu, który będzie potrzebował metody mogące modyfikować swoje dane. Intense rozwiązuje ten problem kopiując metody właściwości system do prototypu konstruktora komponentu. To rozwiązanie umożliwia współdzielenie metod pomiędzy instancjami obiektów tego samego konstruktora komponentu.

Metody wspomagające pracę programisty są skonstruowane w identyczny sposób jak w przypadku metod encji. Współdzielenie poprzez prototyp pozwala zachować małe obiekty dając jednocześnie dużą funkcjonalność dla wszystkich instancji wymaganych elementów. Część metod komponentów jest aliasem do metod managera komponentów. Lista pozostałych metod prezentuje się następująco:

  • getComponent – wyszukuje komponent z kolekcji.
  • getComponentList – zwraca listę dostępnych komponentów.
  • getComponents – zwraca słownik komponentów.
  • removeComponent – usuwa wybrany komponent.
  • createComponent – tworzy nowy komponent.
  • isComponent – sprawdza czy podany obiekt jest komponentem.

W przeciwieństwie do managera encji, manager komponentów nie przechowuje żadnych zależności i powiązań, jest zupełnie niezależnym bytem we frameworku.

W następnym poście poruszę kwestie systemów.