Stack pomohl, řešení:
https://stackoverflow.com/questions/45875413/validation-of-dynamic-angular2-forms
#3 peter
Tohle není php, tohle je angular. Do name atributu nemůžu narvat proměnnou, bude to považovaný za plainstring. Dynamicky se to generuje pomocí direktivy *ngFor. Submit formu se nikam nepošle, akorát spustí v javascriptu funkci, která data odesílá asynchroně.
Ahoj,
snažím se dát dohromady v angularu formulář, který má pár statických polí k vyplnění a pár dynamických (uživatel si může nastavit, kolik jich bude a přes *ngFor se následně vygenerují ve formuláři). Všechna pole podléhají validaci a v případě, že nevyhovují, tak bych rád docílil toho, aby byl submit button disablovaný.
Angular bohužel nedávno dostal update, který zapřínil, že pokud člověk využívá FormGroup a má input s ngModelem, tak daný input musí být pojmenovaný. V template ale, pokud je mi známo, není úplně možné si dynamicky generovat jména. Na stackoverflow jsem našel radu k AngularJS, která doporučila si generované inputy obalit novou FormGroup a pojmenovat tu. Nedá se říct, že by to pomohlo, koneckonců je to akorát přesunutí problému někam jinam. Má otázka tedy zní - Jak mohu zajistit validaci FormGroup, která má dynamicky generované inputy? Ideální by bylo template-driven řešení.
Díky za pomoc, přikládám ještě template kód formuláře.
<form #f="ngForm" (ngSubmit)="createProfile()">
<div class="row align-items-center mb-2">
<div class="col-sm-2">
<b>Name:</b>
</div>
<div class="col-sm-10">
<input type="text" [(ngModel)]="profile.name" class="form-control"
name="profileName" required pattern="[a-zA-Z_][a-zA-Z_\-0-9]*">
</div>
</div>
<div class="channelBox">
<div *ngFor="let c of profile.channels">
<form name="innerForm">
<div class="row align-items-center mb-2">
<div class="col-sm-2">
<b>Name:</b>
</div>
<div class="col-sm-10">
<input type="text" [(ngModel)]="c.name" class="form-control" required
pattern="[a-zA-Z_][a-zA-Z_\-0-9]*" name="channelName">
</div>
</div>
</form>
</div>
</div>
<div>
<button class="btn btn-success" type="submit" [disabled]="!f.valid">
Create profile
</button>
<button class="btn btn-default" (click)="d('reason')">Cancel</button>
</div>
</form>
#1 hlucheucho
Taky se mi to dělo, už jsem to ale pár měsíců nepozoroval (rychlejší internet to asi zamaskoval). Každopádně nemohlo by pomoct tohle? https://superuser.com/…n-completely
#11 peter
Tohle je asi dost věc názoru. Osobně používám ID i pro odlišení znovupoužitelných stylů od těch jednorázových. Jedna věc je stylovat odstavec a druhá věc je stylovat třeba sidebar, který se mi v rámci jednoho dokumentu určitě víckrát objevit nesmí.
#5 Jandak
Jde to, ale to neznamená, že se to tak má dělat. Class slouží k označení více prvků, které mají něco společného, především tedy css styl. Id se používá k označení prvků, které jsou něčím unikátní - například prvek, do kterého chceš nahrávat nějaká data.
Za druhé - ve webových technologiích je v současnosti velice populární návrhový vzor MVC - Model View Controller. Ten spočívá v tom, že máš něco, co ti data zobrazuje (View), něco co s nimi manipuluje (Controller) a něco, co je poskytuje (Model). V tvém případě by to mělo vypadat tak, že budeš mít index.html, který bude tím View - budeš v něm mít nějaký doctype, head, body a uvnitř body budeš mít třeba div s id="content". Pak budeš mít javascript kód - to bude tvůj controller. Nemusí být nutně v separátním .js souboru, ale časem, až se ti aplikace rozroste, tak si to do separátního souboru určitě rád dáš. Javascript udělá to, že při načtení stránky (v Jquery je to myslím $ready nebo něco na ten způsob) si natáhneš data do content a zároveň zaregistruješ svůj setInterval. Nakonec pak budeš mít někde data.php a v něm budeš mít natahovaný obsah. Základní kostra kódu by mohla vypadat takto:
index.html (nikdy jsem se nenaučil Jquery, takže místo $ready používám nativní onload event):
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
var auto_refresh;
function getData() {
$('#content').load('data.php');
}
function initApp() {
getData();
auto_refresh = setInterval( getData, 10000);
}
</script>
</head>
<body onload="initApp()">
<div id="content">
</div>
</body>
</html>
data.php:
<h1>Hello world</h1>
<p>Lorem ipsum dolor sit amet.</p>
Když uděláš tohle, tak stačí mít v prohlížeči otevřený index.html a pokud změníš cokoliv v data.php, tak se ti to nejpozději po deseti sekundách zaktualizuje i v prohlížeči.
Pochopitelně tuto odpověď dost zjednodušuju, protože v reálném prostředí by ti data.php mělo vracet raději JSON objekt, a controller by byl zodpovědný za generování html markupu. To ale dost složité a bez frameworku typu angular je to i na zastřelení. Tobě bude bohatě stačit to, co jsem zde uvedl.
Ahoj,
nejsem úplně zběhlý v Pythonu a tak bych potřeboval poradit/vysvětlit věc, kterou teď při vývoji budu řešit.
Mám Flask server, pomocí kterého se budu dotazovat na databázi. Dotazy můžou být komplikované a jejich vyhodnocení může trvat velice dlouho (minuty, hodiny). Stejně tak může být velké i množství dat, kterými databáze přes stdout odpoví. Pro spouštění procesů používám subprocess.Popen a pro vyčítání stdout Popen.communicate. Proces dotazování by měl fungovat tak, že jedna routa flask serveru spustí proces a zapamatuje si referenci na Popen objekt. Druhá routa poskytuje informaci o stavu dotazu a třetí si pomocí communicate vytáhne stdout/stderr data a vrátí je jako výsledek.
Nicméně v dokumentaci Popen se píše i něco o tom, že by proces mohl naplnit OS buffery pro stdout/stderr. Mám obavu, že přesně toto by u mě mohlo nastat. Nejenže odpověď databáze může být opravdu hodně velká, ale zároveň se ve stejný moment může dotazovat více lidí na databázi. Jak to uvnitř funguje? Bude mít každý dotaz vlastní buffery, nebo je jeden buffer sdílen vícero procesy? Jak můžu ošetřit potenciální naplnění bufferů, aby nedošlo k deadlocku (jako se mi to už stalo s Popen.wait) a zároveň zachoval výše uvedený návrh chování aplikace (a především aby provádění jednoho dorazu nezablokovalo všem ostatním komunikaci se serverem).
Díky předem za odpovědi
Ahoj, mám za úkol naprogramovat csv čtečku podle RFC 4180. Na základě vstupních parametrů mám buď načítat vstupní csv soubor nebo číst stdin. To řeším kódem:
handle = open(filename, encoding = "utf8", newline = "\r\n") if filename else sys.stdin
self.buffer = handle.read()
Pokud vstupní soubor používá pro nový řádek pouze znak LF, můj skript má skončit s chybou. Což mi funguje, pokud soubor čtu přímo, nicméně pokud si ho do programuju načítám přes pipe ze stdin, všechny CR LF znaky se mi zamění za LF. Jak to můžu vyřešit?
Díky za pomoc
#4 Staon
MVC model znám, vůbec mě nenapadlo ho uvažovat kdekoliv jinde, než při vývoji webu :)
Schování Qt a CLI pod jedno rozhraní jsem chtěl řešit tak, že specializované třídy by implementovaly vlastní sady metod pro fungovaní v daném prostředí. Každé prostředí bude separátní binárka a separátní zdrojový kód, takže tam by mě odlišná rozhraní ve specializacích nevadila. Byl to nicméně špatný nápad, což jsem si uvědomil, až při implementaci metod.
S návrhovými vzory se teprve učím a musím si je zažít. Osobně jsem ještě neprogramoval nic, co by vyžadovalo pure virtual třídu (ale vím, co to je i jak se v C++ dělá), zatím jsem dědění využíval jen ve formě mám Bod, který specializuji na Kruh a Obdélník, apod.
Ahoj, potřeboval bych trochu pomoct s návrhovými vzory pro následující úkol: Mám naprogramovat hru Solitaire Klondike a to jak ve verzi pro cmd, tak ve verzi s grafickým rozhraním přes Qt.
Můj prvotní nápad bylo vytvořit si třídu GameMgr, který bude obstarávat logiku hry a který bude pracovat nad třídami Library, Piles a Foundations, které v sobě budou spravovat zásobníky a seznamy objektů Card. Každá třída by se pak dala specializovat pro CLI a pro QT verzi hry, při čemž specializace by spočívala v implementaci metod pro vykreslování na obrazovku. Zde jsem ale narazil na problém.
Jak jednoduše v C++ zajistit, aby GameMgr pracoval buď nad CLI nebo QT verzemi objektů Library, Piles a Foundations a jak zajistit, aby tyto objekty pak pracovaly se správnou verzí objektů Card (či případně i jiných objektů seznamů a zásobníků, pokud budu chtít vykreslovat i ty)?
Napadla mě pouze jedna velice ošklivá varianta, kdy by všechny třídy využívaly šablon a GameMgr objekt by se pak vytvářel nějak tato: GameMgr<Library_Cli<Card_Cli>, Piles_Cli<Card_Cli, Stack_Cli>, Foundations_Cli<Card_Cli>> .... což mi nepřijde jako dvakrát elegantní řešení.
Tipnul bych si, že lepší řešení asi vyžaduje úplně jiný systém dědění, žádný mě ale nenapadá.
Díky předem za pomoc
Díky za všechny názory. Staonova poznámka, že je občas celkem těžké vymyslet, co takový NullObject musí udělat, mi přijde celkem na místě, protože pokud program pokračuje dál, jako by se nechumelilo, tak by ten NullObject měl asi nějak dát najevo, že se vyskytl (aspoň error logem), a že ho tam pravděpodobně nechceme.
Házet výjimku se mi úplně nechce, v případě chybějícího klientského try and catch by ten program lehnul tak jak tak, nebo se pletu?
Zdravím,
pokud mám funkci, která vrací konstantní referenci na nějaký objekt
const Object &getObject() const;
tak pokud by vracela ukazatel a z libovolného důvodu by nemohla vrátit validní ukazatel, vrátila by null. Co má ale v případě chyby vracet, když její návratová hodnota je const& ? Jaký je industry standard pro tento případ?
Mám si pro každý datový typ, u nějž hrozí vrácení chyby, vytvořit nějaký dummy objekt, který by znamenal "toto je chyba" a porovnávat, zda jsou adresy stejné?
Díky za odpovědi
Ahoj,
vytvářím webové GUI pro firemní program, jehož součástí jsou různé konfigurační soubory, které je možné skrze GUI editovat. Program běží jako démon a konfiguráky je možné znovu načíst posláním signálu SIGUSR1 jeho procesu. Tento proces zároveň vytváří soubory, které GUI potřebuje umět akorát číst, práva pro zápis bych mu přiděloval nerad.
Nicméně GUI, běžící pod uživatelem apache (webserver), potřebuje poslat SIGUSR1 procesu, který vytvořil jiný uživatel, na což implicitně nemá práva. Je možné nějakým způsobem přidělit apachi práva k poslání tohoto jednoho konkrétního signálu jednomu konkrétnímu procesu?
V linuxu jsem stále začátečník, tak bych požádal, aby v odpovědích nebylo moc zkratek a slangu ;)
Předem díky za pomoc
Nakonec sem zistil že budu mat stale rovnaky tvar <X,Y,005,105> .. takže spravim radšej dve zvlast funkcie
while (*str != ',') a druhu s while (*str != '>') a to by mohlo fungovat ? ked mu dam začatek a ukončovani tym znakem a nemusim riesit '\0' ???
Matej: však jaky je rozdil je medzi pole char a retazec? len v ukončovani /0 .
KIIV: to sem si nevšimel :/ diky za upozornenie takže while(*str != ( ',' | '>' ))
naco kontrolovat /0??
potřeboval bych poradit, je tam problém s tou velikosti.
int nejmensiKladnaHodnota (int* data, int velikost)
{
int data[10] = {-1, 4, 5, -5, 8, 4, -2, 7, -4, 8};
int nejmensi = 1000;
int i;
for ( i=0; i<=9; i++)
{
if(data[i]>0)
{
if (nejmensi>data[i]);
}
}
return 0;
}
Zdravím, pomohl by mi někdo vyřešit tento úkol? Vůbec nevím
Do datového segmentu uložte bezznaménkové číslo o velikosti 1 byte (označme ho X). Do registru eax uložte součet všech sudých přirozených čísel menších nebo rovných číslu X.
#4 hlucheucho
Díky za rady...jj, všiml jsem si, že jsem to přidal do špatnýho fóra. Nicméně signál budu zesilovat a teprve následně po průchodu zesilovačem a filtrací, bych ho načítal do ATmega, kde už by probíhala detekce, ještě jsem se chtěl zeptat ohledně výstupu, rád bych tepovou frekvenci zobrazoval na 7-segmentu nebo na nějakem displeji, to by asi neměl být problém, ale ještě potřebuju, aby se mě detekovaný maximum projevilo nějak na výstupu, např. když projde R vlny(maximum), tak se rozsvítí LED a pípne bzučák? Je nějak ATmega omezený, co se týče počtu výstupů...?? Díky
Lenze tie hlavicky zavisia jedna na druhej. Skusal som ich vsetky zmazat a hadzal som build a vzdy som si pozrel co mi chyba a pridal som to tam, nakoniec som tam skoncil prakticky s kopiou povodneho priecinku.
Zdravím.
Mám tento kód:
#include <stdio.h>
typedef struct params
{
unsigned char N;
} TParams;
int main()
{
TParams params;
params.N = 5;
char omg[255];
omg[255] = 0;
printf("___%i___", params.N);
return 0;
}
Proč mi printf nevytiskne číslo 5 (jak je nastaveno), ale nulu?
Operace s polem omg právě způsobují tento problém, ale nedaří se mi zjistit proč.
Můžete někdo poradit?
Kompiluju to pomocí nejnovějšího gcc na Windows 7 x64 SP2.
Děkuju