我是SPA的新手,我正在用杜蘭和微風學習它。最近我已將我的解決方案轉換爲Typescript,我想知道是否有任何好的解決方案可以在TypeScript中基於服務器上的EF模型生成類型化的breeze實體。我發現的唯一的東西是這篇文章Breeze.js typed entities,但這只是一小段代碼,甚至不是一個真正的項目。我想知道這個問題有沒有更好的解決方案?如何爲微風實體生成打字稿界面/定義
3
A
回答
9
下面是一個頁面,您可以放在您的網站以生成打印機接口定義。頁面獲取breeze元數據,然後遍歷所有類型,併爲每個類型輸出一個打字稿接口聲明。然後可以將此頁面的輸出粘貼到任何打字稿文件(* .ts)或打字稿定義文件(* .d.ts)中。如果要命名空間接口,請將結果括在模塊聲明中:declare module northwind { ... paste interfaces here... }
。
在使用該頁面之前,您需要進行一次編輯:將實體管理器的控制器url從「api/northwind」更改爲您微風控制器的網址。
生成的接口對Knockout.js打字稿定義它,你可以抓住這裏的依賴:https://github.com/borisyankov/DefinitelyTyped/tree/master/knockout/
從learn.breezejs.com使用羅斯文例子,這個定義生成頁面的輸出會是這樣的:
export interface Employee extends breeze.Entity {
FirstName: KnockoutObservable<string>;
LastName: KnockoutObservable<string>;
}
,你可以接着使用微風執行查詢,並將結果轉換爲員工的數組是這樣的:
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);
});
下面是定義生成器頁面 - 將新的html文件添加到名爲「definitions.html」的項目中,運行項目並導航到頁面。
<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>
1
我們正在研究這個問題,目前還沒有發佈的版本......請聯繫我們[email protected],如果您希望成爲我們的Beta版本,請聯繫我們。
相關問題
- 1. 如何生成打字稿接口/定義爲微風實體 - 跟進
- 2. 微風打字稿工具
- 3. 缺少方法在微風打字稿定義文件
- 4. 生成打字稿
- 5. Xcode 6界面生成器中的自定義字體
- 6. 在界面生成器中看不到自定義字體
- 7. 自定義字體在界面生成器中不起作用!
- 8. 文本視圖/界面生成器中的自定義字體
- 9. 如何定義@ManyToMany生成實體
- 10. 聲明合併與打字稿的自定義界面
- 11. 打字稿定義文件不能使方法實現對象界面
- 12. 如何定義在微風
- 13. 如何爲iPhone創建自定義界面生成器插件?
- 14. 如何在打字稿的界面屬性中定義一個類?
- 15. 爲什麼打字稿在界面中使用自定義符號有限制?
- 16. 如何刪除打字稿定義?
- 17. 打字稿的界面,使可選
- 18. 打字稿動態創建界面
- 19. 如何實現打字稿
- 20. 的NodeJS的未定義 'toUpperCase'(從打字稿生成)
- 21. 生成打字稿定義文件(d.ts)而不編譯.js
- 22. 使用匯總生成打字稿定義文件
- 23. 在界面生成器中使用自定義字體定位UILabel
- 24. 打字稿人界面學生班關係
- 25. 爲YUI創建打字稿定義2
- 26. 如何爲實體對象生成自定義文本文件
- 27. 如何爲使用打字稿編寫的庫生成類型?
- 28. 定義與打字稿
- 29. Kotlin REST打字稿定義
- 30. 打字稿定義文件
我們使用typelite http://type.litesolutions.net/其中使用T4模板來生成打字稿接口。它大多運作良好。 (老問題我konw) – mortb