"bir yazılımcının not defteri.."

24 Ağustos 2010 Salı

Sys.Application.init Event

Sayfanın tüm script leri yüklendiğinde objeler yaratılmadan hemen önce tetiklenen olaydır.

Init olayı tetiklendiğinde çalışmasını istediğimiz bir JavaScript fonksyonunu kolayca bağlayabiliriz. Şöyle ki:

Sys.Application.add_init(fonksyon);
Sys.Application.remove_init(fonksyon);

Init olayına bağladığımız fonksyonların saydfanın objeleri yaratılmadan önce çağrılacağını daima akılda tutmalıyız. Adından da anlaşılacağı üzere burada add_init  ifadesi delegasyon fonksyonumuzu olaya bağlıyor, remove_init ise çıkarıyor.

Bunu hemen bir örnek ile pekiştirelim :


<head runat="server">    

        <script language=javascript>                   

            function applicationInitHandler() {
                alert("init fonksyonu");
            }

         </script> 

</head>


<body>
    <form id="form1" runat="server">    

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

     <script language=javascript>
        Sys.Application.add_init(applicationInitHandler);
     </script>

    </form>   
</body>

 

Yukarıdaki basit örneğimizi izah edersek,
Microsoft Ajax destekli sayfamıza Script Manager ekledik. Hemen ardından da 

Sys.Application.add_init(applicationInitHandler);  kodu ile sayfa yüklenmesinin başında scriptler yüklenir yüklenmez  “applicationInitHandler”  isimli JavaSript fonksyonunun çağrılmasını istedik. Bu fonksyonu da sayfamızın  “heat”  kısmında tanımladık. İçinde sadece bir adet ekrana mesaj çıkaran alert koydum. Sonuçta sayfa açılışında karşımıza hemen bir JavaScript popup mesajı gelecektir.

Bir başka initalizasyon yöntemi ise klasik  pageLoad()  fonksyonu dur. Bu fonksyon hepinizin az çok bildiği gibi sayfa tam olarak yüklendiği ve hazır olduğu anda ilk olarak çağrılan JavaScript fonksyonu. İşlevsellik olarak  Sys.Application.add_init yapısına benzese de aynı değiller;

 

pageLoad() fonksyonunun öncelikli sorunu sayfanın sadece ilk yüklenmesinde çağrılması değil, her postback de tekrar tekrar bu bloğun işlemesidir. Siz postback olayını engellemek için updatepanel kullansanız bile bu JavaScript bloğu tekrar tekrar çalışacaktır.

Sys.Application.add_init  ile delege olarak bağladığınız JavaScript fonksyonu ise yine sayfa her yüklenmesinde ve her postback de çalışacak,, ama updatepanel içi bir tetiklemede çalışmayacaktır.

Bunu test etmek için az önceki örneğimizi biraz daha geliştirip bir test yapalım :

 

<head runat="server">

        <script language=javascript>

            function applicationInitHandler() {
                alert("init fonksyonu");
            }

            function pageLoad() {
                alert("page load fonksyonu");
            }

</script>
 
</head>


<body>
    <form id="form1" runat="server">
   
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

     <script language=javascript>
        Sys.Application.add_init(applicationInitHandler);
     </script>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
                <asp:Button ID="Button1" runat="server" Text="Button1" />
        </ContentTemplate>
    </asp:UpdatePanel>  

    <asp:Button ID="Button2" runat="server" Text="Button2" />

    </form>   
</body>

Yukarıdaki örnekte sayfa açılışına yönelik iki tane initalizasyon fonksyonum var. Bunlardan biri pageLoad, diğeri Sys.Application.add_init ile bağladığım applicationInitHandler isimli fonksyonum.

Her ikisinin de içinde sadece fonsyonun çağrıldığını belirten mesaj kutusu kodu var. Sayfayı çağırdığımızda ilk olarak her iki fonksyonun da çağrıldığına yönelik uyarı mesajı çıkacaktır. Yani her iki fonksyonumda işin başında çağrıldı.

Sayfada iki button var. Biri sayfayı gözle görülür postback ettiren Button2 ve updatepanel içindeki Button1.

Button2 ye basıldığında her iki fonksyon yine tetiklenmesine karşın, Button1 e basıldığında sadece pageLoad fonksyonunun çalıştığını görüyoruz.

Hiç yorum yok: