Keresés

Új hozzászólás Aktív témák

  • petyus_
    senior tag

    Ja, és ki fogja majd pecselni a szeveren (főleg, ha self contained)?

    Ebben van igazság, de sajnos semmilyen szinten nem törekednek arra, hogy uptodate-ek legyenek.

    És mint kiderült, van net core a szervereiken, így aztán végképp nem értjük miért nem engedték.

  • petyus_
    senior tag

    Ezt általában a pénzügyekért felelős vezetők döntik el, nem a fejlesztők.

    Ők rövid távon profitnövekedést akarnak elkönyvelni.
    Nem számít, hogy a fejlesztés ezáltal lelassul, felvesznek még ember.
    Aztán amikor néhány év múlva abszolút tarthatatlan a helyzet, akkor felvesznek egy egész új csapat fejlesztőt, hogy oltsa a tüzet, és tegyen meg bármit az ellen, hogy összeomoljon az egész.

    Ilyenkor van a kolléga által említett 25 év lemaradás lefaragása 15 re.

    Ugyanakkor azt sem szabad elfelejteni, hogy ilyen nagy cégek inkább választják a többéves, de kiforrott, stabil, megfelelően supportált technológiát a néhány éves legújabb trenddel szemben.

    Tisztában vagyok vele, jelenleg is egy webforms alkalmazáson dolgozom, ráadásul a legkisebb probléma vele, hogy webforms :D. Banki project, múltkor nekem kellett deployolnom, ami abból állt, hogy a gépemre publisholt projectet átmásoltam a megadott mappába (egyelőre csak QA-ra, de productionbe is így megy :( ). Ugyanennél a cégnél közben írunk egy web api-t is, de hiába indul 0-ról, azt sem engedték core-ban írni, mert hogy nem lehet csakúgy telepíteni a core-t a szerverekre (ami elég béna kifogás, mert self-contained-ként simán mehetne oda).

  • petyus_
    senior tag

    Ezek a nagy cégek sokszor azért vannak lemaradásban, mert a webes rendszereiket integrálniuk kell egy őskövület háttér rendszerrel, és kompromisszumokat kell kötni a modernitás vs elérhető kliens libraryk között.

    Nem írharja GraphQLben, Typescript backenddel a webes rendszert mert a háttérben lehet, hogy valami olyan nonstandard apihoz kellene csatlakoznia amihez csak a 15 éve elavult .net library képes csak megfelelően.

    A háttérrendszert újraírni pedig nem érdemes, mert tökéletesen működik, és sok millió lenne újraírni.

    Az pedig, hogy mit állítanak, hogy mire büszkék az csak marketing ami nagyon távol áll az ITtól.

    Még ebben az esetben is jobb lenne, ha húznának egy réteget a legacy rendszerre, és legalább afölött lehetne modern technológiákkal dolgozni. Mert így a valamikor esedékes újraírás még drágább lesz.

  • petyus_
    senior tag

    Sziasztok,

    Mint írtam nemrég, most ismerkedem a JS-el. Egy tutorialban látható kis játékot szerettem volna továbbvinni, de elakadtam. Eredetileg három kör, kattra eltűnik. Most van 6 kör, pirosra és sárgára kattintva azok eltűnnek, a kékre alertet dob böngésző. Kis segítséggel összeraktam eddig, viszont most megy az alert része. A kód így nézne ki:

    let redAndYellowElements = document.getElementsByClassName("red-and-yellow");
            for (let i = 0; i < redAndYellowElements.length; i++) {
            redAndYellowElements[i].onclick = () => {
    redAndYellowElements[i].style.display = "none";            
        }        
    }

    let blueElements = document.getElementsByClassName("blue");
            for (let i = 0; i < blueElements.length; i++) {
           blueElements.onclick = () => {
           alert("Nono!");           
        }      
    }

    blueElements-ről lemaradt az [i] .

    13 másodpercen belül hárman :D

  • petyus_
    senior tag

    Van egy szokásos szövegbe ágyázott <span style="display:block" > abcd </span> tagom, amin a nono/block váltogatom . De csúnyán új sorba ugrik . Ezt egy kulcsszóval meg lehet szüntetni, használtam is nagyon régen valamikor, de az istennek sem tudom újra megtalálni, és sajnos azt sem tudom már, hogy melyik kulcsszóra keressek rá érte . :((
    Melyik kulcsszóval lehet megszüntetni ezt az ugrást ?

    ne 'block' legyen, hanem 'inline-block'

  • petyus_
    senior tag

    Szerintetek Angularba "komoly" appban mennyire állja meg a helyét az olyan megoldás, hogy egymásba ágyazom a regisztrációt és a beléptetést is

    Ugye, úgy néz ki a dolog, hogy van egy dialog componemsem, abban pedig selectorral illesztem be a regisztráció vagy a bejelentkezés form komponensét

    És most vettem észre, hogy visszafele nem tudok kommunikálni, tehát ha regisztrál a user, akkor se nem tudom átváltani a felületet login-re, és se nem tudok visszafele adni adatot

    Így 1.0 verzióban azt csináltam, hogy egymásba ágyaztam a regisztrációnál a 2 service hívást, sikeres regisztráció után meghívja a beléptetést, de ez így elég hoki megoldásnak tűnik, pláne, hogy hibát se tudok kezelni, bár elvileg nem is lehetne, mert a regisztrációs adatokat használja beléptetésnél ism de akkor is

    2.0 refatorba arra gondoltam, hogy akkor 1 dialog lenne és benne 2 divvel belerakva mindkét form, nyilván *ngIf-el elválasztva, és így talán normálisabban lehetne megoldani, de még ez se tűnik annyira jónak

    Bocs a sok apró kérdésért, de végre egy viszonylag "normálisabb" dolgot akarok összerakni, és tapasztalat híján nem tudom mik a best practice-k

    (#7766) petyus_ : Na akkor ezt majd megnézem egy kis refactorral :D köszönöm

    Ha az a cél, hogy a regisztrált felhasználó egyből be is legyen léptetve, akkor az API-d register action-je akár vissza is küldheti egyből a tokent (nem tudom, hogy oldod meg a logint, gondolom jwt-vel, azt visszaadhatja a register method is), de ez csak egy tipp így hirtelen, működni működik, de nem tudom hogy szokták ezt megoldani.

  • petyus_
    senior tag

    De így nem figyeli a dirty és pristine tulajdonságokat nem? Mármint ha belekattintassz a mezőbe, akkor nem ír ki hibát, sőt elvileg a a requiredre nem is fog hibát jelezni csak a form lesz invalid

    Ezeket a mat-error alapból figyeli, required-öt is pl csak akkor írja ki, ha rámész az input mezőre, és kijössz belőle, tehát ha rákattintasz, de még nem írtál bele, akkor ki sem írja, csak ha úgy hagyod el, hogy üresen hagytad, vagy írtál bele, de visszatörölted.

    "Errors are hidden initially and will be displayed on invalid form fields after the user has interacted with the element" - ezért, ha csak egy error-message van a fieldhez, akkor nem is kell neked foglalkozni az ngIf-ekkel, csak ha több van, és akkor is elég, ha csak az adott error-t teszed az ngIf-be

  • petyus_
    senior tag

    Az igazából ennyi:

    export function containDigit(control: AbstractControl): { [key: string]: boolean } | null {
        if(control.errors?.required || control.errors?.minlength || control.errors?.maxlength){

            return null;    }
       if (!/[A-Z]/.test(control.value) && environment.passwordContainDigit) {

    return { 
    'containUpperCase': true }    
    }
        return null;

    }

    Akkor ír ki 2 hibaüzenetet amikor belekattintottam a mezőbe, de nem írtam semmit, nyilván olyankor required-re is lő, meg erre is, ezért próbálkoztam az első if-ben, megnézni, hogyha van már a required-re hiba, akkor ne is nézze ezt

    Kipróbáltam most a te validátorodat, és nekem jól működik.

    Így néz ki a html:
    <mat-form-field class="w-100">
      <mat-label>Name</mat-label>
      <input type="text" id="name" formControlName="name" matInput placeholder="Enter category name" />
      <mat-error *ngIf="name.hasError('required')">Name is required.</mat-error>
      <mat-error *ngIf="name.hasError('minlength')">Name must be at least 3 characters.</mat-error>
      <mat-error *ngIf="name.hasError('containUpperCase')">Must conatin uppercase</mat-error>
    </mat-form-field>

    És a ts-ben annyit csináltam, hogy beleraktam a te functionödet, meg hozzáadtam a formcontrolhoz:
    name: new FormControl('', [Validators.required, Validators.minLength(3), this.containUpperCase]),

    Így üresen, és 3 karakter alatt csak a minlength hibát írja, containUpperCase-t meg utána (átneveztem containDigit-ről :) ).

    A name az egy sima getter, vissza adja a 'this.form.control.name'-et, így átláthatódd a html.

  • petyus_
    senior tag

    Igazából [ennyi]
    egyenlőre még hunglish :D de majd többnyelvűsítés a cél, igazából a gyári validatoroknál le van valahogy kezelve ez szerintem, mert pl egy üres mezőre nem írja ki, hogy kötelező, és email formátumnak meg kell felelnie

    De akkor majd utánanézek, hogy lehet ezt normálisan kezelni

    Nemrég kezdtem el használni a materialt, tehát nem 100%, hogy én tudom jól, de "mat-error"-ból lehet több, abba kell belerakni az error-message-eket (szerkesztettem az előzőt, raktam be egy saját kódot).

    Viszont itt most a ts file kéne, ahol megírtad a custom validatort.
    Egyébként pl a minlength így van megírva:

    static minLength(minLength: number): ValidatorFn {
    return (control: AbstractControl): ValidationErrors | null => {
      if (isEmptyInputValue(control.value)) {
    return null;  // don't validate empty values to allow optional controls
    }
       const length: number = control.value ? control.value.length : 0;
    return length < minLength ?
    {'minlength': {'requiredLength': minLength, 'actualLength': length}} :
         null;    
    };
    }

    isEmpty ennyit csinál:

    return value == null || value.length === 0;

  • petyus_
    senior tag

    Bekérdezek ide, hátha valaki találkozott hasonlóval

    Angular 9

    Reactive formot használok, meg materialt

    Használok egy pár beépített validátort, meg egy sajátot a jelszóra

    A gond ott van, hogy minden hibát egyszer ír ki, tehát először csak a required-re lő, aztán ha van benne valami, akkor kiírja, hogy rövid a jelszó stb, de ha használom a saját validátoromat , ami azt nézi, hogy van e benne nagybetű, akkor kiírja a hibát akkor is, amikor üres a beviteli mező, és akkor 2 hibát ír ki a required-re, meg a saját validációmra

    Ezt nem tudom, hogyan kellene megoldani, azt próbáltam már, hogy a custom validatorba megvizsgálom, hogy van e benne hiba, és a hibák között nincs az, amire éppen létrahoztam a custom validatort, de ígyis ugyan ezt csinálta

    Legrosszabb esetben használok pattern-t, de azért szebb lenne emígy megoldani

    Ha mutatsz kódot, kicsit könnyebb lenne. Írtad, hogy Materialt használsz, ott ha több hibaüzenet is van, akkor neked kell kezelned, hogy melyik mikor jelenjen meg, alapból csak annyit néz, hogy dirty || touched, és ha van hiba, akkor megjeleníti (ha több hiba van, akkor mindet). Neked megírnod mindegyik hibára, hogy melyik mikor jelenjen meg.

    Illetve, ha már dirty || touched, és ezért mutatja a required hibát, akkor egyértelmű, hogy mutatja a "nincs e betű" hibát, mert ha üres, akkor nincs e betű :) .

    Nekem pl van egy ilyenem:

    <mat-form-field>
    <mat-label>Name</mat-label>
    <input type="text" id="name" formControlName="name" matInput />
    <mat-error *ngIf="accountName.hasError('required')">Account name is required</mat-error>
    <mat-error *ngIf="accountName.hasError('minlength')">Account name must be at least 3 characters</mat-error>
    </mat-form-field>

    Itt a required akkor jelenik meg, ha dirty || touched, a minlength-es pedig akkor, ha 1 vagy 2 karakter van beírva, de ez a gyári minlength, itt megvan írva ez a viselkedés.

  • petyus_
    senior tag

    Sziasztok!js-ben hogyan lehet megoldani a számrendszerek közötti átváltást?konkrétan 10-ből 16-ba szeretném egy text mező értékét kiolvasni majd átváltani 16-os ba.köszi. :F

    oda:
    hexString = number.toString(16);

    vissza:
    number = parseInt(hexString, 16);

    [link]

  • petyus_
    senior tag

    Köszönöm szépen a választ. Működik.
    Csak azt nem értem így miért nem.
    var price = document.getElementById("price_net_netto_IDE_102").textContent
    price.innerHTML= Number(price) + 1

    Mert a .textContent() egy stringet ad vissza, és ezen akarod beállítani az innerHTML-t.

  • petyus_
    senior tag

    Köszönöm a megoldást. Így már működik, amit szeretnék.
    Egyetlen gond van vele, hogy az első klikknél nem csinál semmit, csak a második kattintás után kezdi törölni a div tartalmát.

    Valószínűleg van a végén whitespace, és azt vágja le először, hívja rajta egy trim()-et.

    (viszont akkor a spacek alapból mindig törölve lesznek, nem tudom ez gond-e).

  • petyus_
    senior tag

    Nem fontos az animáció. A lényeg az lenne, hogy törölhető legyen a div tartalma gombnyomásra, csak a gombnyomás nem az egész div contetntet törölné, hanem csak egy egy karaktert gombnyomásonként. Egyfajta backspaceként működne.

    $(document).ready(function(){
    $("button").click(function(){
    const div = $('#myDiv');
    div.text(div.text().substring(0,div.text().length-1))
    });
    });

  • petyus_
    senior tag

    Sehogy se működik nem azzal van gond. Valami más lesz. Amúgy azért gyakorlom iframen, mert tömegesen szeretnék eltüntetni dolgokat egy másik oldalról és azt beépíteni a saját oldalamba.

    Értem, de te az eltüntetést akarod gyakorolni, , az hogy iframe, vagy nem, tök mindegy, de sokkal egyszerűbb lenne ezeket csinálni, ha látnád rendesen a HTML-t. Majd amikor élesben csinálod, akkor elé rakod, hogy az iframe-ből válassz ki valamit.

    Amúgy most látom, az előző azért nem megy, mert '.fa'-t írtál, nem kell elé a pont, az akkor kell, ha a querySelectorAll-t használod.

  • petyus_
    senior tag

    Igen ez valóban működik és értem is a lényegét, de ennek nem. Az második .fa osztály akarom eltüntetni, ami a második .fa osztály és nem engedi azt.

    <!DOCTYPE html>
    <html>
    <body>

    <iframe id="myFrame" src="/default.asp" style="height:380px;width:100%"></iframe>

    <p>Click the "Tryit" button to hide the first H1 element in the iframe (another document).</p>

    <button onclick="myFunction()">Try it</button>

    <script>
    function myFunction() {
    var iframe = document.getElementById("myFrame");
    var elmnt = iframe.contentWindow.document.getElementsByClassName(".fa")[0];
    elmnt.style.display = "none";

    }




    </script>

    </body>
    </html>

    Arra az elemre gondolsz, ami a "fa" osztályú elemek közül a második? Ha igen, akkor azért nem megy, mert az elsőt választod ki. A getElementsByTagName("fa") egy tömböt ad vissza, te odaírtad a végére, hogy [0], így az első elemet választod ki (ugyanúgy, mint ahogy korábban az első képet választottad ki). Ha a másodikat szeretnéd, akkor [1]-t írj a végére.)

    Egyébként miért jó ezeket iframe-en gyakorolni? azonkívül, hogy ott van előtte, hogy iframe.contentWindow, pontosan ugyanúgy megy, mintha a sima HTML-t változtatnád, csak akkor jobban látnád a HTML szerkezetet.

  • petyus_
    senior tag

    Ebben a példában tisztán látszik, hogy lehet eltüntetni a H2-es tageket. Én át írtam ezt IMG-re, mert az adott oldalon láttam IMG tageket és azt nem tünteti el.

    Értem amit írsz, meg is néztem a példát, és azt mondom, hogy működik, amit csinálsz, de a kép, amit eltüntetsz, az ez:
    <img src="https://www.google.com/images/cleardot.gif" class="goog-te-gadget-icon" alt="" style="background-image: url(&quot;https://translate.googleapis.com/translate_static/img/te_ctrl3.gif&quot;); background-position: -65px 0px;">

    Ha megnyitod az src-jét, láthatod, hogy ez nem egy olyan kép, amit látsz az oldalon, ezért nem is látod, hogy eltűnik.

    Nézd meg mondjuk erre:
    var elmnt = iframe.contentWindow.document.getElementsByTagName("img")[4];

    Ez a "Web Templates" alatti kép, ha ezen csinálod, akkor láthatod, hogy működik.

  • petyus_
    senior tag

    Tudna nekem valaki ebben segítséget nyújtani?

    Tudod, hogy mi az a kép, amit el akarsz tüntetni? A display none után rakd be ezt: console.log(elmnt);, szerintem ott lesz, hogy style="...sokminden...; display:none".

  • petyus_
    senior tag

    szia

    kiszedtem őket, köszi a tanácsot. : ) még csak annyi volna a kérdésem, hogy mindezekkel hogyan kellene az info div-et megcéloznom. ez a script arra nem mutat rá, ha jól láttam. az volna a célom, hogy ha a doboz tartalma változik, akkor az info színe változzon és akár mindez többször ismétlődve egyetlen oldalon.

    Ja, értem. Akkor viszont, ahogy Jim-Y is írta, kellene a html szerkezete is. Valamennyire biztos kapcsolódik a 'doboz'-hoz az 'info' (tehát pl van egy div, és azon belül van a doboz és info div), úgyhogy azt is meg lehet csinálni, csak ehhez kell a html.

  • petyus_
    senior tag

    szia

    köszönöm, de elnézést, elbénáztam... a doboz nincsen beágyazva az info divbe... külön div-ekról volna szó... :W

    Akkor ugyanez, csak nem kell a ".parent()".
    Illetve most nézem, hogy a .css() részt csak copy-paste-eltem, mindkettőnél ugyanaz van, ha esetleg innen másolod :) .

  • petyus_
    senior tag

    sziasztok

    adva van az alábbi html kód, ami háromszor ismétlődik

    <div class="info">
    <div class="doboz">[tartalom]</div>
    </div>

    a doboz tartalmát egy sql select tölti fel. amikor a felhasználó rányom a küldés gombra, a lekérdezés lefut és beleírja a tartalmát a dobozba. a doboz tartalma jquery slider-el nyílik le, bár ez most talán nem fontos. írtam hozzá egy rövid js sort, ami a következőt csinálja: megnézni van-e bármi tartalom a doboz div-en belül, ha pedig van, az info doboz tartalmát szürkéről zöldre festi, illetve ad hozzá szöveget is.

    ez a js kódom:

    jQuery(document).ready(function($) {
    if ($('.doboz').html()) {
    $('.info').css({'background-color': '#addfad', 'color': 'black'}).text('kész');
    } else {
    $('.info').css({'background-color': 'gray', 'color': 'white'}).text('nincs kész');
    }
    });

    ezt biztosan lehetne szebben is, de egyelőre működik, már ennek örülök. viszont az egyszerűsége a kódnak a veszte is. felhasználó egy oldalon belül három sql-t kérhet le a szervertől, három blokkban. ha az első lefut, teljes joggal minden doboz zöld lesz, hiszen a doboz class háromszor van jelen, mindhármat vizsgálja. valamilyen formában egyedi azonosítót kellene adnom, arra viszont egyelőre nem jöttem rá, hogyan kellene belefűznöm a js-be

    jQuery(document).ready(function($) {
    var doboz = $('.doboz');
    doboz.each(function(){
    if($(this).html()){
    $(this).parent().css({'background-color': '#addfad', 'color': 'black'}).text('kész');
    }
    else{
    $(this).parent().css({'background-color': '#addfad', 'color': 'black'}).text('kész');
    }
    });

    Rég nem jquery-ztem, lehet, hogy van szebb megoldás, de ez működik

Új hozzászólás Aktív témák