[ Belgarion @ 08.07.2013. 12:37 ] @
Imam user controlu npr:

Code:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="div.ascx.vb" Inherits="UserControls_div" %>
<script>

    function Show(showFirst){
        <%--//Radi nesto:--%>
        if (showFirst){
            $("#div1").show();
            $("#div2").hide();
        }
        else{
            $("#div1").hide();
            $("#div2").show();
        }
    }

</script>
<div id="div1">
   11111111
</div>
<div id="div2">
   222222222
</div>



Pozovem user controlu na stranici:

Code:
<uc6:div ID="a1" runat="server" />


I kada pozivam funkciju Show(true) iz user controle onda sve radi.

ALI. Šta ako želim da dva puta koristim user kontrolu?

Code:
<uc6:div ID="a1" runat="server" />
<uc6:div ID="a2" runat="server" />


Kako onda da znam kada pozovem metod Show da li se on odnosi na prvi ili drugi poziv user controle?

Šta ako želim da za prvu user conrolu pozovem funkciju Show(true); a za drugu Show(false);?

Unapred zahvalan na pomoći da ovo shvatim.

[Ovu poruku je menjao Belgarion dana 08.07.2013. u 14:27 GMT+1]
[ plague @ 08.07.2013. 14:52 ] @
Ako se preko div1 ili div2 poziva funkcija mozes dodati div koji ce obuhvatiti ova dva, i onda ako neki od div-a pozove Show() funkciju da ides $(this).parent('div').children('#div1') i $(this).parent('div').children('#div2') i dalje radis sta hoces. Ne znam da li mora jos da se doda .first().
[ Belgarion @ 10.07.2013. 08:31 ] @
Bojim se da ne razumem.

Šta to znači "Ako se preko div1 ili div2 poziva funkcija" ?

Ovo je trivijalni primer koji ilustruje problem.
Potencijalno može da bude 100 div-ova i još raznih tagova.
Mene zanima suština, kako se to prave user kontrole koje se mogu pozivati više puta na stranici?
Ako želim da mogu da je pozovem i 100 puta i to nezavisno od JQuery-ja.

[Ovu poruku je menjao Belgarion dana 10.07.2013. u 09:57 GMT+1]
[ dusans @ 10.07.2013. 09:13 ] @
Da bi koristio N puta istu kontrolu onda moraš da imaš "nekakav" jedinstveni ID elementu koji obuhvata sadržaj kontrole.
Na primer, možeš da koristiš ClientID same kontrole u tu svrhu.
Evo ti jedan primer na brzaka (najlepše je da se uradi preko jQuery plugin-a, ali ovde ne ulazim u to):

Code:


<div id="<%= ClientID %>_root">
    <div data-id="div1">
       11111111
    </div>
    <div data-id="div2">
       222222222
    </div>
</div>

<script>
    
    // Defiicija funkcije za root div kontrole
    $("#<%= ClientID %>_root")[0].Show = function (showFirst) {
        var div1 = $(this).find("[data-id='div1']");
        var div2 = $(this).find("[data-id='div2']");
        if (showFirst){
            div1.show();
            div2.hide();
        }
        else{
            div1.hide();
            div2.show();
        }
    }

   // Primeri poziva funkcije
   $("#<%= ClientID %>_root")[0].Show(true);
   $("#<%= ClientID %>_root")[0].Show(false);

</script>

[ Belgarion @ 10.07.2013. 10:01 ] @
Ok, kapiram otprilike ideju.
Samo što funkcija verovatno treba da se pozove sa ID-em user controle.
Jer ako samo stavim ClientID onda će oba imati isti ID.

ovako nekako:
Code:
   $("#<%= a1.ClientID %>_root")[0].Show(true);
   $("#<%= a2.ClientID %>_root")[0].Show(false);


I još jedno pitanje.
Čemu služi "data-id", zašto ne bih koristio samo id atribut?
[ dusans @ 10.07.2013. 10:20 ] @
data-id atribut sam koristio umesto id atributa da ne bih "pokvario" HTML - po pravilu, ne bi trebao da imaš dva elementa sa istim ID-em.
ClientID kontrole je po defaultu jedinstven, probaj i videćeš da je on tipa "ctl01_ctl07_ctl31_a1".

http://msdn.microsoft.com/en-u...m.web.ui.control.clientid.aspx
[ Belgarion @ 10.07.2013. 11:06 ] @
Hvala Dusane.
Sada kontam.
[ plague @ 10.07.2013. 11:28 ] @
Citat:
Belgarion:
Bojim se da ne razumem.

Šta to znači "Ako se preko div1 ili div2 poziva funkcija" ?

[Ovu poruku je menjao Belgarion dana 10.07.2013. u 09:57 GMT+1]


Dusan je objasnio, skripta mora znati da prepozna o kom se tacno elementu radi jer je ona globalna na stranici.

Ako funkciju Show okidaju div1 ili div2 skripta moze koristiti relativnu putanju da nadje kontrolu o kojoj se radi koristeci this koji referencira pokretaca skripte, a preko njega nadje "roditeljski element" i onda odradi sve sto treba na "child" elementima.

Zato sam pitao ko poziva funkciju jer ako van kontrole pozivas Show(), npr ubacis neko dugme koje nije deo tvoje kontrole, onda moras obezbediti funkciji i element na koji mislis ako vec planiras da imas vise takvih user kontrola.