$(window).bind(‘load’ … ); nu se declanșează (Programare, Javascript, Jquery, Backbone.Js, Requirejs)

JustWannaFly a intrebat.
a intrebat.

În prezent lucrez la realizarea unei aplicații web care să deschidă doar o singură instanță. Acest lucru se face cu cookie-uri care sunt setate/verificate atunci când aplicația este încărcată și eliminate atunci când aplicația este închisă. Logica mea pentru setarea cookie-urilor am lucrat deja, dar am o problemă în a o face să se declanșeze.

Aplicația mea web este construită folosind require.js și backbone.js. În fișierul meu main.js leg apelurile mele la logica de instanță unică la load și unload așa cum se poate vedea mai jos.

requirejs(['jquery', 'router', 'singleInstance'], function ($, Router, SingleInstance) {
    //TODO fix load event is not triggering...
    $(window).bind('load', function () {
        SingleInstance.setSingleInstance();
    });
    $(window).bind('unload', function () {
        SingleInstance.removeSingleInstace();
    });

Prin setarea unor puncte de întrerupere pe apelurile către setSingleInstance() și removeSingleInstance() am constatat că removeSingleInstance() este apelat așa cum ar fi de așteptat cu evenimentele de descărcare, dar setSingleInstance() nu este apelat niciodată. Cum pot să leg acest apel la load eveniment?

Comentarii

  • Nu văd niciun $(window).bind('load' … ) –  > Por Tushar.
  • $(document).ready(function () { SingleInstance.setSingleInstance(); }) –  > Por Sudharsan S.
  • Îmi cer scuze, am încercat să depanez și nu am reușit să inversez corect ultima modificare. Acum este reparată –  > Por JustWannaFly.
  • Faci $(window).bind('ready') și nu $(window).bind('load'). –  > Por Ja͢ck.
  • @JqueryKing Codul tău funcționează, dar dacă aș putea aș vrea să folosesc fereastra load din motive de stil pentru a se potrivi cu evenimentul unload –  > Por JustWannaFly.
1 răspunsuri
Blaise

Problema este că în momentul în care legi ascultătorul, fereastra s-a încărcat deja, deci nu declanșează funcția de callback. Dacă nu are efecte secundare, apelați pur și simplu SingleInstance.setSingleInstance(); imediat în callback-ul tău requirejs.

Aș dori să folosesc evenimentul de încărcare a ferestrei din motive de stil pentru a se potrivi cu cel de descărcare

Ei bine, îți blochează codul să funcționeze.

Comentarii

  • Vă mulțumim pentru clarificare. Aveam impresia că, întrucât nu inițializez routerul decât mai târziu în cod, evenimentul de încărcare a ferestrei nu se va declanșa decât după legarea mea. –  > Por JustWannaFly.
  • $(window).load() este diferit de $(document).ready():: the $(document).ready() se va declanșa chiar și după ce evenimentul a fost declanșat, dar funcția de callback a $(window).load() nu o va face. Vedeți acest exemplu în acest joc: jsfiddle.net/pdv432w6 –  > Por Blaise.