Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prawidłowe rozumiemie kodu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Caporeira
  1. webMI.data.subscribe(webMI.query["base"] + ".Data.Status", function(e) {
  2. var motor = "silnik";
  3. var estop = e.value[0];
  4. var off = e.value[1];
  5. var error = e.value[2];
  6. var inspection = e.value[3];
  7. var maintenance = e.value[4];
  8. var jam = e.value[5];
  9. var running = e.value[6];
  10. var ready = e.value[7];
  11. estop_active = false;
  12.  
  13. // set state error when node state is "bad"
  14. var unknown = (e.status > 0);
  15.  
  16. if (unknown) {
  17. webMI.gfx.setFill(motor, "#e6e6e6");
  18. state_color = "#f2f2f2";
  19. }
  20. else if (estop){
  21. webMI.gfx.setFill(motor, {0:"#ff0000",2:"#bb0000",4:"#ff0000",6:"#bb0000",8:"#ff0000",10:"#bb0000"});
  22. state_color = "#bb0000";
  23. estop_active = true;
  24. }
  25. else if (off){
  26. webMI.gfx.setFill(motor, "#c8c8c8");
  27. state_color = "#c8c8c8";
  28. }
  29. else if (error){
  30. webMI.gfx.setFill(motor, "#ff0000");
  31. state_color = "#ff0000";
  32. }
  33. else if (maintenance) {
  34. webMI.gfx.setFill(motor, "#0000ff");
  35. state_color = "#0000ff";
  36. }
  37. else if (jam) {
  38. webMI.gfx.setFill(motor, "#ffaa00");
  39. state_color = "#ffaa00";
  40. }
  41. else if (running) {
  42. webMI.gfx.setFill(motor, "#00c800");
  43. state_color = "#00c800";
  44. }
  45. else if (ready) {
  46. webMI.gfx.setFill(motor, "#007700");
  47. state_color = "#009900";
  48. }
  49. // unknown state
  50. else {
  51. webMI.gfx.setFill(motor, "#e6e6e6");
  52. state_color = "#f2f2f2";
  53. }
  54. Info.Color = state_color;
  55. });

Chcę zrozumieć ten kod. Na daną chwilę rozumiem go tak że:
  1. webMI.data.subscribe(webMI.query["base"] + ".Data.Status", function(e)

query sprawdza zmienną Status. Base że to w tym samym folderze (czyli coś jak lokalna lokalizacja). .Data.Status to folder pod którym znajduję się zmienna.
function(e) to funkcja obsługująca zdarzenia. Zmienna Status jest jednowymiarową tablicą bitową (z wartościami Boolean).

  1. var motor = "silnik";
  2. var estop = e.value[0];
  3. var off = e.value[1];
  4. var error = e.value[2];

Tutaj następuje przypisanie wartości z tablicy do zmiennych. Np. wartość tablicy drugiej przypisana jest do zmiennej off.
Kiedy w tablicy nr 2 znajdzie się wartość True wtedy wykona się kawałek kodu:
  1. else if (off){
  2. webMI.gfx.setFill(motor, "#c8c8c8");
  3. state_color = "#c8c8c8";

Dokładnie to obiekt o nazwie silnik zmieni kolor.
Ale po co jest tutaj zmienna state_color ?
Co powoduje taki zapis ? Info.Color = state_color;
e.value reaguje na zmianę wartości, a e.status ? (var unknown = (e.status > 0)wink.gif
PrinceOfPersia
za mało informacji. To jest pytanie dotyczące raczej biblioteki, z której korzystasz. Byś musiał podać większy kontekst.
BTW. to jest JavaScript po stronie serwera(NodeJS) czy przeglądarki? Wygląda jak coś serwerowego.

EDIT:
chyba, że chodzi o sam styl pisania...
Cytat
Ale po co jest tutaj zmienna state_color ?
Co powoduje taki zapis ? Info.Color = state_color;

przypuszczam, że żeby nie powtarzać się (google: Don\'t Repeat Yourself). W zasadzie, żeby zachować jakość kodu to zamiast pisać
Kod
webMI.gfx.setFill(motor, \"#c8c8c8\");

z 10 razy też powinno się wydzielić zmienną np. motor_color = \'#c8c8c8\', i analogicznie na końcu tylko wywoływać funkcję webMI.gfx.setFill...

w ten sposób jeśli np. w przyszłej wersji biblioteki np. funkcja setFill stanie się przestarzała, a wprowadzą np. setFillColor, to będziemy musieli nanieść zmiany tylko w jednym miejscu.
Caporeira
Możliwe że to biblioteka webMI ?

W jaki sposób sprawdzić można co to za biblioteka ? Wiekszy kontekst ?
Program z którego korzystam poniekąd sam tworzy kod stąd te powielenia w skrypcie.

Jest to po stronie serwera.

Znalazłem coś takiego w Helpie:
The display editor supports SVG Tiny 1.2
http://www.w3.org/TR/SVGTiny12/REC-SVGTiny12-20081222.pdf

Więc może o tę bibliotekę się rozchodzi ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.