我们的项目目前使用的Silverlight消费OData服务。 这使得生活非常简单,因为我们可以直接引用OData服务从而给我们产生的服务参考/实体。
然而,有我们是否应该移动到HTML(HTML5)的讨论。 我想知道会发生什么,如果我们做出这种改变。 我们希望借力像当然jQuery的一个框架。
- 我主要关心的是如何消费通过JavaScript / jQuery的相同的OData服务。
- 我们如何想反序列化/序列化实体从这个OData服务返回?
- 我们的数据的合同应该是硬编码的(如果是的话,这实在令人难以接受我们)?
谢谢!
OData的来源可以返回数据作为JSON所以您的网页可以XHR您的数据和接收它作为JSON它被反序列化回一个Javascript对象为您挑选分开,ACT-时或显示。
这里有一些额外的链接,让你开始:
- 新的JavaScript的OData库[MSDN]
- 通过示例的OData协议[MSDN]
- 在使用jQuery JSON格式利用的OData端点
- 消费与JayData OData服务
- 消费与BreezeJS OData服务
HTH。
我们还制作称为一个很酷的小图书馆Data.js(http://datajs.codeplex.com/)将显著加快从JavaScript的OData消费。 下面是CoffeeScript的一个示例:
success = (data) -> $("#searchResultsTemplate").tmpl(data).appendTo("#resultsArea")
error = (err) -> $("#resultsArea").text(JSON.stringify(err.message))
do ->
$("#search").click(->
OData.defaultHttpClient.enableJsonpCallback = true
OData.read("http://odata.netflix.com/v2/Catalog/Titles?$top=5", success, error))
和JavaScript它产生:
success = function(data) {
return $("#searchResultsTemplate").tmpl(data).appendTo("#resultsArea");
};
error = function(err) {
return $("#resultsArea").text(JSON.stringify(err.message));
};
(function() {
return $("#search").click(function() {
OData.defaultHttpClient.enableJsonpCallback = true;
return OData.read("http://odata.netflix.com/v2/Catalog/Titles?$top=5", success, error);
});
})();
到目前为止,我一直在使用它的CoffeeScript,jQuery和Knockout.js了成功。
作为替代方案,你可以给一个镜头JayData ,它具有的OData支持-基于过冷却datajs库。 它在几个存储提供商或协议提供了一个抽象数据访问层,其中之一是重要的OData。
上述查询将是这个样子
var source = new $data.yourOdataContext({serviceUri:"http://odata.netflix.com/v2/Catalog"});
source.Titles
.take(5)
.forEach( function(catalog) { render(catalog); });
正如你可能不会想到这个被翻译成... /标题?$过滤器= 5,所以操作不会在客户端完成,即使简单的语法可能建议。
JayData会给你的JavaScript语言查询(JSLQ)让您查询使用ES5标准过滤器功能数据:所有的JavaScript,需要不的OData查询语法的知识。
如果你想在表中显示和使用排序,分页,搜索数据,你可以使用jQuery插件数据表https://www.datatables.net/与OData的连接器http://vpllan.github.io/jQuery.dataTables。 ODATA /
你不需要任何额外的编程,因为数据表将执行的操作有你。