Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Rejestracja po stronie przeglądarki

Po stronie przeglądarki musimy sami zarejestrować funkcję. W tym celu należy wywołać metodę register z Używanie stworzonej funkcji po stronie przeglądarki (na formularzu zadania) wymaga od programisty dostarczenia jej implementacji w języku JavaScript. Taka implementacja wykorzystywana jest podczas dynamicznych obliczeń po stronie przeglądarki klienta.

Funkcje rejestrowane są z wykorzystaniem API 

Jsdoc
propertyjsdoc.plusworkflow
classNamePW.core.fn.Functions
 (skrócona nazwa PW.Functions):

Code Block
languagejs
// funkcja "max" która zwraca obiekt typu "float" i przyjmuje 2 parametry typu "float"
PW.Functions.register({
	name: "maxOf",
	fn:"max", "float", ["float", "float"], function(value1, value2)
	{
		return Math.max(value1, value2);
	},
	parameterTypes: ["float", FloatType]
});

W tym przypadku zarejestrowaliśmy funkcję o nazwie maxOf z implementacją przekazaną we właściwości fn.

Właściwość parameterTypes jest opcjonalna, jednak w większości przypadków powinna być uzupełniana. Określa ona typy parametrów funkcji, dzięki czemu podczas wywoływania funkcji podane wartości parametrów są konwertowane do tych typów. Parametry podajemy w takiej samej kolejności jak występują one w funkcji. Parametry możemy podać jako klucz typu (float), lub jako obiekt typu (FloatType). Jeżeli funkcja zostanie wywołana z większą ilością parametrów niż ilość zdefiniowanych typów, to wszystkie dodatkowe parametry zostaną przekonwertowane do typu, który jest ostatni w tablicy.

Note
Należy pamiętać, że każda funkcja zarejestrowana po stronie przeglądarki musi mieć swój odpowiednik po stronie serwera.
);

Podczas rejestracji funkcji niezbędne jest zdefiniowanie:

  • nazwy (można zarejestrować wiele funkcji o tej samej nazwie ale musza mieć one inne typy parametrów)
  • typu zwracanej wartości
  • typów parametrów
  • implementacji funkcji

Tak zarejestrowana funkcja zostanie wywołana tylko dla wywołań z argumentami które będą pasowały do zdefiniowanych typów (albo będą tego samego typu albo mogą zostać przekonwertowane).

Info

Oczywiście tak przygotowany skrypt musi zostać wstrzyknięty w obszar formularza zadania. Więcej o wstrzykiwaniu skryptów tutaj.

Funkcje ogólne

Jeżeli podczas rejestracji funkcji nie zdefiniujemy typów parametrów, to funkcja będzie traktowana jako implementacja ogólna. Taka implementacja zostaje wywołana jeżeli nie będzie żadnej innej implementacji funkcji, która może zostać wywołana z aktualnymi parametrami. Parametry przekazane do takiej funkcji są instancjami klasy

Jsdoc
propertyjsdoc.plusworkflow
classNamePW.component.Arg
.

Code Block
languagejs
// brak zdefiniowanych typów
PW.Functions.register("isVariable", "boolean", function(arg1){
	// arg1 jest obiektem klasy PW.component.Arg
	return !arg1.isArray && arg.value.is("variable");
});

Rejestracja we wtyczce

Rejestracja funkcji we wtyczce jest taka sama jak zostało to opisane powyżej, jednak należy dodatkowo zaznaczyć, że wtyczka ta udostępnia funkcje do zarejestrowania. W tym celu należy w pliku suncode-plugin.xml dodać wpis:

Code Block
languagexml
<functions key="functions" />

Jest to wymagane, aby nie trzeba było przeszukiwac wszystkich uruchomionych wtyczek, tylko te, które faktycznie posiadają funkcjeTaki wpis spowoduje automatyczne wyszukanie wszystkich zdefiniowanych funkcji.

Wykorzystanie funkcji po stronie przeglądarki

...