jquery - Pot să suprascriu document.ready în TypeScript


Am o aplicație care are pagini diferite și aproximativ fiecare pagină are propriul js (care este generat de compilatorul TypeScript). Metoda document.ready pentru fiecare pagină are câteva atribute comune și caut să pun funcțiile/proprietățile comune într-o clasă de bază TypeScript.

Deci ar trebui să arate așa

 class PageX extends BasePage
    {
        onLoad => which should act like document.ready
    }

Se poate face asta? Nu sunt sigur dacă este posibil.

Răspuns #1

Dacă vrei funcționalitatea de bază în fiecare pagină, atunci va trebui să incluzi scriptul de bază în fiecare pagină. Derivarea unei clase nu copiază funcționalitatea părintelui în copil.

Ai putea avea o clasă PageBase într-un fișier .ts care să conțină comportamentul și proprietățile comune, și apoi să derivezi din aceasta o clasă pentru comportamentul specific fiecărei pagini. Ceva de genul următor:

// Base.ts
class PageBase {
  commonProperty: any;

  constructor(doc:HTMLDocument){
    doc.onload = function(){
      alert('Common code here');
    }
  }
}

Rezultatul compilat din cele de mai sus (base.js) ar fi inclus printr-un tag script pe fiecare pagină, urmat de scriptul pe pagină generat de ceva de genul...

// pageX.ts

/// <reference path="Base.ts"/>
class PageX extends PageBase {
  constructor(){
    super(window.document);
    // Rest of my code here...
  }
}

Sună cam așa cum căutai?

Răspunsul #2

Cred că logica nu aparține unei clase.

dar dacă declari o funcție var în partea de sus a fișierului .ts și o apelezi din acel lucru extern doc.ready, ai putea asculta schimbarea acelei funcții în instanța clasei..

vede

Funcție ascultător în JavaScript și/sau jQuery

și Ascultă apelurile de stare și funcție