C'è un modo per creare entità tipizzate usando Breeze nello stesso modo in cui JaySvcUtil funziona con JayData? Questo include il supporto Typescript? C'è anche un supporto generale per Typescript all'interno del framework Breeze?Breeze.js entità digitate
risposta
Abbiamo piani per fare di più con TypeScript, ma non ci siamo ancora impegnati in un intervallo di tempo specifico. (Il lavoro di Boris, menzionato nel post di John, è sicuramente un ottimo inizio).
AGGIORNAMENTO: A partire dalla v 0.84.4, Breeze fornisce il supporto completo per TypeScript.
Per quanto riguarda la generazione automatica di classi Javascript in fase di progettazione per ciascuna entità; abbiamo avuto diverse discussioni interne su questo, ma stiamo davvero aspettando di vedere per cosa la comunità vota. Quasi certamente ci arriveremo a questo punto, ma i tuoi voti sul
UserVoice possono sicuramente accelerare il processo.
Per quanto riguarda il dattiloscritto, è sicuramente sul nostro radar. Come minimo creeremo un file 'declare' di TypeScript che consentirà una migliore intelligenza quando si usa Breeze.
Puoi votare su oltre UserVoice.
Fino ad allora è possibile utilizzare Boris Yankov DefinitelyTyped che supporta Breeze.
Grazie. Quindi ci sono piani per le entità tipizzate a tempo di sviluppo? Vengo da uno sfondo .net e sto cercando di decidere tra jaydata e breeze per un nuovo progetto mobile. Breeze sembra più familiare, ma senza "classi" del client tipizzate e intellisense, sembra proprio una faccenda reale per fare le cose! – user1894205
Sono di parte, ma non ho trovato mancanza di intelligenza perché le entità fossero l'enorme ostacolo che mi aspettavo che fosse. Voglio che sia sicuro. Ma ci sono così tanti più fastidi urgenti in JS :) Valutare JayData con tutti i mezzi. Mi piacerebbe sapere se * questa * è la differenza decisiva. – Ward
miei due centesimi ...
ho utilizzato il file di definizione definatelytyped per brezza e sembra funzionare bene.
È abbastanza semplice creare uno script T4 per generare file .d.ts per tutte le entità in un .edmx e quindi ottenere l'intellisense che desideri. Se piace a Ward, potrei pubblicare un esempio di script T4 da qualche parte.
Questo elenco contiene una versione modificata di T4TS che contiene un supporto iniziale per la generazione di "classi Javascript per la progettazione per ogni entità" con supporto per Breeze.
https://gist.github.com/alexdresko/5393155
Finora, è adatta alle mie esigenze. Sono abbastanza sicuro che è necessario avere la definizione DefinitelyTyped Breeze nella tua soluzione affinché funzioni correttamente.
Forse questo è qualcosa che potrebbe essere aggiunto a T4TS in modo permanente? Forse è qualcosa che il team di Breeze dovrebbe prendere in considerazione? O forse è solo stupido e non funziona davvero per nessuno tranne me. :)
Nel mio Dataservice, posso fare qualcosa di simile:
createOrganization() : T4TS.Organization {
return <T4TS.Organization>this.manager.createEntity("Organization");
}
Poi, nel mio VM, tutto questo codice è ben typesafe ..
organizationSubmit() {
this.editingOrganization(false);
var newOrganization = this.dataservice.createOrganization();
newOrganization.Name(this.organizationNameInput());
if (newOrganization.entityAspect.validateEntity()) {
this.extendOrganization(newOrganization);
this.organizations.push(newOrganization);
this.dataservice.saveChanges();
this.organizationNameInput("");
} else {
this.handleItemErrors(newOrganization);
}
};
io in realtà non sapere dove andare con questo da qui. Ho provato a forare T4TS, ma non ho avuto il tempo di capire il suo sistema di build. Da qui l'essenza. Le opinioni sono certamente benvenute.
Ho iniziato a discutere di Breeze in T4TS in questo numero (avviato da @ alex-dresko): https://github.com/cskeppstedt/t4ts/issues/14 – Christoffer
Molto bello, è ancora il modo migliore per andare o è lì un'altra versione che è stata aggiornata? – John
Ho risposto alla tua domanda sul problema github. –
Di seguito è una pagina che è possibile rilasciare nel sito per generare definizioni di interfaccia dattiloscritto. La pagina recupera i metadati di brezza, quindi itera su tutti i tipi e genera una dichiarazione dell'interfaccia dattiloscritto per ciascun tipo.L'output di questa pagina può quindi essere incollato in qualsiasi file typescript (* .ts) o file di definizione dattiloscritto (* .d.ts). Includere i risultati in una dichiarazione di modulo se si desidera assegnare un nome all'interfaccia: declare module northwind { ... paste interfaces here... }
.
Prima di utilizzare la pagina, è necessario effettuare una modifica: modificare l'url del controller del gestore entità da "api/northwind" a qualsiasi URL del proprio breeze controller.
Le interfacce generati hanno una dipendenza definizioni dattiloscritto Knockout.js cui è possibile afferrare qui: https://github.com/borisyankov/DefinitelyTyped/tree/master/knockout/
Utilizzando l'esempio Northwind dal learn.breezejs.com, l'uscita di questa pagina generatore di definizioni sarebbe qualcosa di simile a questo:
export interface Employee extends breeze.Entity {
FirstName: KnockoutObservable<string>;
LastName: KnockoutObservable<string>;
}
si potrebbe poi eseguire una query utilizzando brezza e il cast dei risultati di una serie di dipendenti in questo modo:
var manager = new breeze.EntityManager('api/northwind');
var query = new breeze.EntityQuery()
.from("Employees");
manager.executeQuery(query).then(data => {
// ***cast the results to a strongly typed array of Employee***
var employees = <Employee[]>data.results;
}).fail(e => {
alert(e);
});
di seguito è la pagina del generatore di definizioni: aggiungere un nuovo file html al progetto denominato "definitions.html", eseguire il progetto e accedere alla pagina.
<html>
<head>
<title>Typescript Definition Generator</title>
<style>
code {
white-space: pre;
}
</style>
<script src="//code.jquery.com/jquery-2.1.0.min.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/q.js/1.0.0/q.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/breezejs/1.4.4/breeze.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var entityManager = new breeze.EntityManager('api/northwind');
entityManager.fetchMetadata()
.then(function() {
var html = '',
types = entityManager.metadataStore.getEntityTypes(),
type,
i,
j,
property,
crlf = String.fromCharCode(13),
code = document.createElement('code'),
script = document.createElement('script');
function getJSType(metadataType) {
if (/(Int64)|(Int32)|(Int16)|(Byte)|(Decimal)|(Double)|(Single)|(number)/.test(metadataType))
return 'number';
else if (/(DateTime)|(DateTimeOffset)|(Time)|(Date)/.test(metadataType))
return 'Date';
else if (/(Boolean)/i.test(metadataType))
return 'boolean';
return 'string';
}
for (i = 0; i < types.length; i++) {
// type declaration
var type = types[i];
html += 'export interface ' + type.shortName;
// base type
html += ' extends ';
if (type.hasOwnProperty('baseEntityType')) {
html += type.baseEntityType.shortName;
} else {
html += 'breeze.Entity';
}
html += ' {' + crlf;
// data properties
for (j = 0; j < type.dataProperties.length; j++) {
property = type.dataProperties[j];
if (type.baseEntityType && type.baseEntityType.dataProperties.filter(function (p) { return p.name === property.name; }).length > 0)
continue;
html += ' ' + property.name;
//if (property.isNullable)
// html += '?';
html += ': KnockoutObservable<';
html += getJSType(property.dataType.name);
html += '>; //' + property.dataType.name + crlf;
}
// navigation properties
for (j = 0; j < type.navigationProperties.length; j++) {
property = type.navigationProperties[j];
if (type.baseEntityType && type.baseEntityType.navigationProperties.filter(function (p) { return p.name === property.name; }).length > 0)
continue;
html += ' ' + property.name;
//if (property.isNullable)
// html += '?';
if (property.isScalar)
html += ': KnockoutObservable<';
else
html += ': KnockoutObservableArray<';
html += property.entityType.shortName;
html += '>;' + crlf;
}
html += '}' + crlf + crlf;
}
code.innerHTML = html;
$(code).addClass('prettyprint');
document.body.appendChild(code);
script.setAttribute('src', '//google-code-prettify.googlecode.com/svn/loader/run_prettify.js');
document.body.appendChild(script);
})
.fail(function (reason) {
alert(reason);
});
});
</script>
</head>
<body>
</body>
</html>
Abbastanza impressionante. Sono nuovo di TypeScript. Le mie collezioni stanno uscendo come, ad esempio, questo ... "ControlValues: ControlValue;". Perché il tipo non è un contenitore generico di tipo di elemento ControlValue? –
@ IanWarburton- buona chiamata. Ho aggiornato la risposta per generare i tipi di proprietà corretti: KnockoutObservable
E grazie per la tua grande risposta. Hai idea di come questo possa essere incorporato nella pipeline di costruzione di Visual Studio? –
Per defiintions brezza tipografico, usare il pacchetto NuGet breeze.TypeScript.DefinitelyTyped. Per creare definizioni per le tue entità, puoi utilizzare TypeLITE. Si creerà un file .d.ts
con interfacce in questo modo:
declare module MyProject.Models {
interface Customer {
Id: number;
AccountNumber: string;
...
Mentre queste interfacce descrivono pienamente le vostre entità, che non si estendono breeze.Entity
. Per giocare bene con le definizioni del tipo Breeze API, derivare le proprie interfacce a questi, in questo modo:
import Models = MyProject.Models;
interface Customer extends Models.Customer, breeze.Entity { }
...
Questo comporta ancora un po 'di codifica manuale, ma almeno è solo per tipo, non per immobile.
- 1. Alternativa a Breeze.js?
- 2. Conteggi in Breeze.js
- 3. Analizzatore di espressioni digitate
- 4. breeze.js e SharePoint 2013
- 5. Come generare funzioni casuali, digitate
- 6. Utilizzo di Breeze.js con Dapper
- 7. Utilizzo di Breeze.js senza Entity Framework
- 8. Come rendere sicure queste funzioni digitate in modo dinamico?
- 9. Come si verificano le interfacce digitate con anatra in python?
- 10. Come utilizzare Immesable JS con classi ES6 digitate?
- 11. Come implementare le stringhe digitate in C++ 11?
- 12. Converti entità entità nell'entità
- 13. Entità distaccata e entità gestita
- 14. entità quadro entità sql vs linq alle entità
- 15. Entità Framework POCO Entità nell'applicazione web multistrato
- 16. Entità di tracciamento automatico vs Entità POCO
- 17. DTO in entità e entità in DTO
- 18. Entità Doctrine clone profondo con entità correlate
- 19. mappatura codice struttura entità entità privata prima
- 20. Mappatura entità RestKit e mappatura entità padre
- 21. Qual è il modo migliore per creare query LINQ fortemente digitate da alcune stringhe date, tramite la riflessione
- 22. Come implementare l'applicazione Pagina singola abilitata con Breeze.js e la memoria locale HTML5
- 23. In che modo breeze.js gestisce la sicurezza ed evita di esporre la logica aziendale
- 24. Come si utilizza XMLSerialize per le proprietà Enum digitate in C#?
- 25. Hot Towel/Durandal/Breeze.js: come proteggere le chiamate dati in verticale?
- 26. JPA con JTA: persist entità e unire entità figlio cascata
- 27. Java: conversione di entità html denominate in entità xml numerate
- 28. Risolvi entità di destinazione con più gestori di entità
- 29. Entità di aggiornamento EF4 senza prima entità di acquisizione
- 30. Nome entità HTML rispetto al numero di entità?
A partire dalla v 0.84.4, breeze fornisce il supporto completo per TypeScript tramite un file "breeze.d.ts" disponibile sul sito Web di breeze all'interno delle zip di breeze trovate [qui] (http://www.breezejs.com/documentation /Scaricare). –