-
Fototrend
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
-
Zedz
addikt
Milyen szinten akarsz JS-t tanulni?
-
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. -
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.
[ Szerkesztve ]
-
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
https://jsfiddle.net/bnrmss1j/1/
Ha nem ez volt a kerdes akkor meg csak siman jobban kell kerdezni ^^
[ Szerkesztve ]
-
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.
[ Szerkesztve ]
“All nothings are not equal.”
-
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).
[ Szerkesztve ]
-
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
}
});[ Szerkesztve ]
-
martonx
veterán
-
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);
};
Új hozzászólás Aktív témák
- A tüntetések ellenére is bővítheti német gyárát a Tesla
- Autós topik
- Kertészet, mezőgazdaság topik
- A fociról könnyedén, egy baráti társaságban
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- Apple notebookok
- Sony Xperia 1 V - kizárólag igényeseknek
- Samsung Galaxy S23 Ultra - non plus ultra
- Gitáros topic
- Parci: Milyen mosógépet vegyek?
- További aktív témák...
- Apple Iphone 13 128gb Fehér -karcmentes -
- ZAOPIN Z2 4K gamer egér - fehér
- Galaxy Buds FE - Grafitszürke
- Lenovo ThinkBook 15 G2 ITL, 15,6" FHD IPS Kijelző, i7-1165G7 CPU, 16GB DDR4, 512GB SSD, WIN 11/10, S
- HP Zbook 15 G3, 15,6" FHD IPS Kijelző, I7-6820HQ CPU, 32GB DDR3, 512GB SSD, NVIDIA 4GB VGA WIN 10, S
Állásajánlatok
Cég: Alpha Laptopszerviz Kft.
Város: Pécs
Cég: Promenade Publishing House Kft.
Város: Budapest