19

我们的项目目前使用 Silverlight 来使用 Odata 服务。这让生活变得非常简单,因为我们可以只引用 OData 服务,从而为我们提供生成的服务引用/实体。

然而,关于我们是否应该转向 Html (html5) 存在一些讨论。我想知道如果我们做出这个改变会发生什么。我们当然会利用像 jQuery 这样的框架。

  • 我主要关心的是如何通过 JavaScript/jQuery 使用相同的 OData 服务。
  • 我们应该如何反序列化/序列化从此 OData 服务返回的实体?
  • 我们的数据合约是否应该是硬编码的(如果是这样,这对我们来说真的是不可接受的)?

谢谢!

4

4 回答 4

16

OData 源可以将数据作为 JSON 返回,因此您的网页可以 XHR 您的数据并将其作为 JSON 接收,然后将其反序列化回 Javascript 对象,供您选择并执行或显示。

以下是一些帮助您入门的附加链接:

HTH。

于 2012-04-11T19:23:31.870 回答
11

我们还制作了一个非常酷的小库,名为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 一起使用。

于 2012-04-12T00:03:23.737 回答
3

作为替代方案,您可以试一试 JayData,它具有 oData 支持 - 基于 supercool datajs 库。它在多个存储提供程序或协议上提供了一个抽象的数据访问层,其中一个重要的是 OData。

上面提到的查询看起来像这样

var  source = new $data.yourOdataContext({serviceUri:"http://odata.netflix.com/v2/Catalog"});

source.Titles
  .take(5)
  .forEach( function(catalog) { render(catalog); });

您可能不会期望这会被翻译为 .../Titles?$filter=5,因此即使简单的语法可能暗示,操作也不会在客户端上完成。

JayData 将为您提供JavaScript 语言查询 (JSLQ),让您使用 ES5 标准过滤器功能查询数据:全部使用 JavaScript,不需要 OData 查询语法知识。

于 2012-05-02T13:52:25.620 回答
1

如果要在表格中显示数据并使用排序、分页、搜索,可以使用 jQuery dataTables 插件https://www.datatables.net/和 OData 连接器http://vpllan.github.io/jQuery.dataTables。 o数据/

您不需要任何额外的编程,因为 dataTables 将为您执行那里的操作。

于 2014-03-04T22:47:46.030 回答