Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Aktualizacja danych w zmiennej i elemencie DOM
jutro
post 4.09.2015, 17:42:11
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.09.2015

Ostrzeżenie: (0%)
-----


Witam

Chciałbym stworzyć prostą grę IDLE w javascripcie mam takie pytanie. Dane całej gry przechowuję w zmiennej, przykład:

  1. var data = {
  2. "value1": 4
  3. };


W htmlu mam takie małe okienko wyświetlające tę wartość np.

  1. <span id="value1">4</span>


Chciałbym aby po kliknięciu w button aktualizowała się wartość jednocześnie w zmiennej i elemencie. Czy coś takiego:

  1. $("value1").click(function() {
  2. data.value1 += 1;
  3. $("value1").text(data.value1);
  4. });


Pytanie czy to rozwiązanie jest poprawne czy może stosuje się inne metody? Dodam że elementów klikalnych będzie dość sporo.

Ten post edytował jutro 4.09.2015, 17:42:41
Go to the top of the page
+Quote Post
Comandeer
post 4.09.2015, 17:48:47
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Jest jeszcze coś, co nazywa się 2-way databinding, a co w JS de facto spopularyzował Angular.js (jedna z niewielu rzeczy, która im się udała… wink.gif): http://bzdety.comandeer.pl/binding/ → ale to już może być armata na muchę.

Chociaż zastosowanie Object.observe sprawiłaby, że mógłbyś se napisać prostą funkcję, dzięki której każda zmiana w obiekcie powodowałaby zmianą zawartości elementu HTML o [id] takim, jak nazwa własności obserwowanego obiektu. Z tym, że w chwili obecnej AFAIR Object.observe działa tylko w Chrome.

ALE! wink.gif Można go zastąpić w takim wypadku setterem dla własności w obiekcie, a to de facto działa wszędzie.


--------------------
Go to the top of the page
+Quote Post
jutro
post 4.09.2015, 18:04:14
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.09.2015

Ostrzeżenie: (0%)
-----


Angular chyba faktycznie odpada przy takim małym projekcie smile.gif

W ostatnim zdaniu miałeś na myśli coś w tym stylu?

  1. var data = {
  2. "value1": 2,
  3. "value2": 6
  4. };
  5.  
  6. function setValue(name, value) {
  7. data[name] += 1;
  8. $("#"+name).text(data[name]);
  9. };
  10.  
  11. $("button1").click(function(){
  12. setValue("value1", 1);
  13. });
Go to the top of the page
+Quote Post
Comandeer
post 4.09.2015, 18:58:49
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Nie, raczej coś takiego: http://jsfiddle.net/Comandeer/2088qcdw/ → settery i gettery to "nowości" z ES5

Co do Angulara - nie mówiłem, żeby jego użyć (człowieku, jestem największym jego hejterem po tej stronie Wisły biggrin.gif). Raczej mówiłem o użyciu 2-way databinding.


--------------------
Go to the top of the page
+Quote Post
ctom
post 4.09.2015, 19:52:37
Post #5





Grupa: Zarejestrowani
Postów: 321
Pomógł: 55
Dołączył: 19.04.2009

Ostrzeżenie: (0%)
-----


a w Vuejs możesz zrobić to tak:

  1. <div id="app">
  2. <div v-on="click: up1">{{ value1 }}</div>
  3. </div>



[JAVASCRIPT] pobierz, plaintext
  1. new Vue({
  2. el: '#app',
  3. data: {
  4. value1: 10
  5. },
  6. methods: {
  7. up1: function(){
  8. this.value1++;
  9. }
  10. }
  11. });
[JAVASCRIPT] pobierz, plaintext


--------------------
Polecam MyDevil hosting idealny dla deweloperów
Go to the top of the page
+Quote Post
Comandeer
post 4.09.2015, 20:03:59
Post #6





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Jedno mnie w tym rozwiązaniu irytuje: po co to [v-on] skoro o wiele przejrzyściej byłoby to zrobić jako część konstruktora Vue?


--------------------
Go to the top of the page
+Quote Post
jutro
post 4.09.2015, 20:05:06
Post #7





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.09.2015

Ostrzeżenie: (0%)
-----


@ctom wolałbym nie używać żadnych bibliotek.
@comandeer właśnie o to mi chodziło! To już enty raz jak ratujesz mnie przed żmudnym przepytywaniem googla bo "nie wiem jak to się nazywa". Dzięki smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:23