- OLED TV topic
- Az előírások megszegése miatt éghet le egyes alaplapokon a Socket AM5 foglalat
- Hobby elektronika
- Fujifilm X
- Házimozi belépő szinten
- Amlogic S905, S912 processzoros készülékek
- Vezeték nélküli fülhallgatók
- Bambu Lab 3D nyomtatók
- AMD Navi Radeon™ RX 9xxx sorozat
- VR topik (Oculus Rift, stb.)
-
PROHARDVER!
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Jim-Y
veterán
const elementWidthProvider = new swh.ElementWidthProvider();
const columnWidthManager = new window.ColumnWidthManager(elementWidthProvider);
function getColumnsWidthSetterFn(columnWidthManager) {
return function (gridId) {
columnWidthManager.setWidths(gridId, maxWidths);
};
}
// 1
window.ColumnWidthManager.setColumnsWidth = getColumnWidthSetterFn(columnWidthManager);
// 2
window.ColumnWidthManager.setColumnsWidth = (gridId) => {
columnWidthManager.setWidths(gridId, maxWidths);
}; -
-
Jim-Y
veterán
En ezt valahogy igy oldanam meg. Kicsit objektumorientaltabb.
class DataSourceIndexedDB extends EventEmitter {
get MESSAGES() {
return {
CONNECTION_ERROR: 'error',
DATABASE_OPENED: 'db-opened'
}
}
constructor(databaseName) {
this._dbName = databaseName;
this._database = null;
}
openDatabase() {
const request = indexedDB.open(this._dbName, 1);
request.onerror = this.onConnectionError.bind(this);
request.onsuccess = this.onConnectionSuccess.bind(this);
}
onConnectionError(event) {
this.emit(this.MESSAGES.CONNECTION_ERROR, {
code: event.target.errorCode
});
}
onConnectionSuccess(event) {
this._database = event.target.result;
this.emit(this.MESSAGES.DATABASE_OPENED);
}
getObjectStore(storeName, mode) {
const tx = this._database.transaction(storeName, mode);
return tx.objectStore(storeName);
}
}
const database = 'xyz';
const table = 'xyz';
const indexedDB = new DataSourceIndexedDB(database);
// might be automated in constructor
indexedDB.openDatabase();
indexedDB.on(indexedDB.MESSAGES.DATABASE_OPENED, () => {
const store = indexedDB.getObjectStore(table, 'readwrite');
const request = store.getAll();
request.onsuccess = (event) => {
const data = event.target.result;
// do smtg with data
};
request.onerror = (event) => {
// error handling
}
}); -
Doink
aktív tag
A egyik megoldás az hogy ígéretet (Promise) adj vissza és belül az onsuccess-nél resolve-old, onerror-nál meg reject-eled.
this.getData = function(){
return new Promise(resolve,reject) => {
let query = db.valami_async_művelet()
query.onsuccess = function(result){
resolve(result)
}
query.onerror = function(err){
reject(err)
}
}
}Így fogod tudni meghívni:
ValamiService.getData().then((result) => {
// beteljesült az ígéret és a result-ban lesz az eredmény
}).catch(error) => {
// hiba
});Másik elegáns megoldás ha cold observable-t használsz (rxjs).
-
Karma
félisten
Az aszinkron működést nem tudod megkerülni, úgyhogy olyan getData függvényt, amit egyszerűen szinkron módon meghívsz és eredményeket ad vissza, lehetetlen írni. (Nem is feltétlen baj.)
Van egy pár lehetőséged, az egyik legegyszerűbb, ha adsz egy callback paramétert a getData függvényednek. Ez például egy olyan kétparaméteres függvény, aminek az első paramétere a futáskor történt hiba (lehet `null` is ha minden szép), a második pedig a tényleges adat.
A lényeg, hogy az indexedDB-s kódod az utolsó onsuccess handler végén meghívja ezt a függvényt, így tudod feldolgozni az eredményt.
Például:
this.getData = function(callback){
var open = indexedDB.open(database, 1);
open.onsuccess = function() {
// Start a new transaction
var db = open.result;
var tx = db.transaction(table, "readonly");
var request = tx.objectStore(table).getAll();
request.onsuccess = function() {
callback(null, request.result);
};
request.onerror = function() {
callback(request.errorCode);
};
// Close the db when the transaction is done
tx.oncomplete = function() {
db.close();
};
};
open.onerror = function() {
callback(open.errorCode);
}
};Máshol meg így hívod:
valami.getData(function(err, data) {
if (err) {
console.log("Error while reading data", err);
return;
}
console.log("Found data", data);
});Ha meg tisztább kódot akarsz, keress egy promise wrappert az IndexedDB-hez szerintem. Persze azt is meg kell tanulni használni először.
Amúgy sose használtam az IndexedDB-t, de a megérzésem azt mondja, hogy nem kéne minden lekérdezésnél nyitni-zárni.
-
Jim-Y
veterán
https://jsfiddle.net/bnrmss1j/1/
Ha nem ez volt a kerdes akkor meg csak siman jobban kell kerdezni ^^
-
Zedz
addikt
which implements the model–view–controller (MVC) pattern
Idézet a linkedből. Nincs olyan, hogy "ilyen mvc". Ez ugyan az mint amit linkelte, totálisan más mint amiről amúgy beszélünk.Miért akarod mindenképp JS-sel megoldani? Mutasd meg a munkahelyden, hogy szebben sikerült megoldani, mint ahogy kérték.
ASP.NET MVC-től szintén független a Javascript. JS tudás nélkül is neki tudsz esni, tekintve, hogy maximum frontend oldalon fogod használni, aztán onnantól meg a szerver közel mindegy. By the way martonx kolléga az ASP.NET MVC guruja, ő többet tudna róla mesélni, hogy hogyan is kell hozzá fogni.
-
Jim-Y
veterán
En nem mondom, mint a tobbiek, hogy ne igy csinald. Ezt a feladatot kaptad igy csinald szepen meg, bar agyuval losz a verebre semmilyen dropdown a mai vilagban nem igy mukodik mint ahogy ezt csinalod. Ettol fuggetlenul kalapald valahogy ossze es utana kezdj el egy normalis eletszeru feladaton dolgozni.
Mondok 1-2 peldat:
1: js tanulasra -> irj egy backend-frontend alkalmazast. A backend legyen egy sima faek egyszerusegu REST szerver. express vagy koa peldaul. Ne csinaljon tobbet mint regisztraljon 1-2 endpointot es adjon vissza par adatot. A frontend legyen angular vagy react es ne csinaljon mast mint kommunikaljon a backenddel kerje el az adatot es jelenitsen meg belole egy chart-ot. Pl d3-al. Ez egy egyszeru kezdoknek is egy nap alatt veghez viheto feladat es erinti azokat a dolgokat amikkel nap mint nap fogsz talalkozni front-end fejlesztokent. AJAX, charting, FE framework stb..
2: css tanulasra -> csinalj egy olyan komponenst ami egy jobb oldali menu sort implemental. A kepernyo jobb oldalan teljes magassagban egy mondjuk 70 pixel szeles savban ikonokat tud tarolni, pont mint egy navigacios menu. A kihivas benne az, hogy ez a sav fix 70 pixel szeles legyen DE ha tobb ikont teszunk bele mint amennyi latszodna az aktualis bongeszo meretetol fuggoen akkor a lelogo ikonokat eltunteted (overflow:hidden) viszont ha raviszed az egeret a 70px szeles savra akkor baloldalon kinyilik a panel es lathatova valnak a nem latszodo ikonok.
Lehet nem ezeket fogod csinalni vegul, de szerintem ezek sokkal inkabb eletszeru feladatok mint egy dropdown implementalasa js-ben.
-
Zedz
addikt
Nem értem a problémát. A HTML rész kigenerálása valamilyen template enginnel (blade, pug, jinja, whatever) az egy dolog. Erre ráhúzni a fentebb linkelt CSS-t, megint más. Független a kettő egymástól.
MVC fejlesztés lesz a fő feladatom
Ez a kijelentés így hibás. Az MVC egyfajta logikai struktúra. Ez szintén független a témánktól.ehhez szükséges HTML, CSS, Bootsrap 3, jQuery, JS tudást kell felszednem
Pure CSS megoldás fentebb, de a Bootstrap is rendelkezik beépített dropdownnal. Az más kérdés, hogy ha jól emlékszem akkor ők JS-sel oldják meg, de szigorúan magány véleményem szerint a bootstrap semmilyen szempontból sem követendő példa.Milyen szinten akarsz JS-t tanulni?
Azért kérdeztem, mert ajánlottam volna olvasni valót. -
Zedz
addikt
Milyen szinten akarsz JS-t tanulni?
Új hozzászólás Aktív témák
Hirdetés
- Lenovo Gamer All in One: i7, 16gb, 512gb, Full hd, Nvidia GF. 840A, JBL hang
- MSI RTX GeForce 3060 12 GB-os VGA kártya ! AkciÓÓ!
- Külső táp nélküli Asus GeForce GTX 1050Ti 4 GB ! AkciÓÓ!
- LG UltraGear 39GS95QE-B OLED Monitor! 3440x1440 / 240Hz / 0.03ms / G-Sync / FreeSync! BeszámítOK
- Sigma C 150-600mm F5-6.3 DG OS HSM újszerű
- BESZÁMÍTÁS! GIGABYTE B550M R5 5600 32GB DDR4 512GB SSD RTX 2070 SUPER 8GB ZALMAN I3 NEO Enermax 650W
- BESZÁMÍTÁS! Asus Maximus VIII Hero i7 6700K 16GB DDR4 512GB SSD RX 5700 XT 8GB Zalman i3 NEO 700W
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X3D 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 15 Pro 128GB Blue Titanium -1 ÉV GARANCIA -Kártyafüggetlen, MS3225
- Lenovo Thinkpad Tablet X1 Gen 3
Állásajánlatok
Cég: FOTC
Város: Budapest