Oracle JET 应用程序数据可以来自生成 JSON 数据的任何 Web 数据源,例如 REST 服务,服务器发送事件(SSE)或 WebSocket 。此外,Oracle JET 还提供了基于 Oracle REST 标准集成 Web 服务数据的特定支持。

  关于 Oracle JET Common Model 和 Collection API :

  • oj.Model:表示 REST 服务器等数据服务中的单个记录。(获取JSON数据设定单个数据模型)
  • oj.Collection:表示一组数据记录,是 oj.Model 相同类型对象的列表。(将单个数据模型收集或直接使用JSON数据模型)
  • oj.Events:提供事件处理的方法。
  • oj.KnockoutUtils:提供用于将属性 oj.Model 或 oj.Collection 对象映射到用于组件 ViewModels 的 Knockout 可观察器的方法。(将收集到的数据转化成可以在knockout使用的数据)

  oj.Model 和 oj.Collection 包括客户端 API,它提供了一种将外部数据引入 Oracle JET 应用程序的方式。

  oj.KnockoutUtils 提供了 map() 将模型对象中的属性或集合对象中的所有模型的属性映射到应用程序的视图数据模型的方法。

  案例讲解:

  一个 JSON 数据

  1. {
  2. "Departments" : [ {
  3. "DepartmentId" : 10,
  4. "DepartmentName" : "Administration",
  5. "ManagerId" : null,
  6. "LocationId" : null,
  7. "version" : "ACED00057...contents truncated",
  8. "links" : {
  9. "self" : {
  10. "rel" : "self",
  11. "href" : "http://RESTServerIP:Port/stable/rest/Departments/10"
  12. },
  13. "canonical" : {
  14. "rel" : "canonical",
  15. "href" : "http://RESTServerIP:Port/stable/rest/Departments/10"
  16. },
  17. "Employees" : {
  18. "rel" : "child",
  19. "href" : "http://RESTServerIP:Port/stable/rest/Departments/10/Employees"
  20. }
  21. }
  22. }, {
  23. "DepartmentId" : 20,
  24. "DepartmentName" : "Retail Marketing",
  25. "ManagerId" : null,
  26. "LocationId" : null,
  27. "version" : "ACED00057...contents truncated",
  28. "links" : {
  29. "self" : {
  30. "rel" : "self",
  31. "href" : "http://RESTServerIP:Port/stable/rest/Departments/20"
  32. },
  33. "canonical" : {
  34. "rel" : "canonical",
  35. "href" : "http://RESTServerIP:Port/stable/rest/Departments/20"
  36. },
  37. "Employees" : {
  38. "rel" : "child",
  39. "href" : "http://RESTServerIP:Port/stable/rest/Departments/20/Employees"
  40. }
  41. }
  42. }, {
  43. ... contents omitted
  44. } ],
  45. "links" : {
  46. "self" : {
  47. "rel" : "self",
  48. "href" : "http://RESTServerIP:Port/stable/rest/Departments"
  49. }
  50. },
  51. "_contextInfo" : {
  52. "limit" : 25,
  53. "offset" : 0
  54. }
  55. }

  要获得 DepartmentId,DepartmentName,LocationId,和ManagerId展示。

  在viewmodel中添加JS代码:

  

  1.定义单个数据模型 oj.Model.extend() 。

  1. define(['ojs/ojcore', 'knockout', 'ojs/ojmodel'],
  2. function(oj, ko)
  3. {
  4. function viewModel() {
  5. var self = this;
  6. self.serviceURL = 'http://RESTServerIP:Port/stable/rest/Departments'; // 一个JSON地址
  7.  
  8.        // 回调函数,用于在从数据服务返回时对JSON数据对象进行解析,形成单个数据模型。
  9. parseDept = function(response) {
  10. if (response['Departments']) {
  11. var innerResponse = response['Departments'][0];
  12. if (innerResponse.links.Employees == undefined) {
  13. var empHref = '';
  14. } else {
  15. empHref = innerResponse.links.Employees.href;
  16. }
  17. return {DepartmentId: innerResponse['DepartmentId'],
  18. DepartmentName: innerResponse['DepartmentName'],
  19. links: {Employees: {rel: 'child', href: empHref}}};
  20. }
  21. return {DepartmentId: response['DepartmentId'],
  22. DepartmentName: response['DepartmentName'],
  23. LocationId:response['LocationId'],
  24. ManagerId:response['LocationId'],
  25. links: {Employees: {rel: 'child', href: response['links']['Employees'].href}}};
  26. };
  27. var Department = oj.Model.extend({
  28. urlRoot: self.serviceURL,
  29. parse: parseDept,
  30. idAttribute: 'DepartmentId'
  31. });
  32.  
  33. var myDept = new Department();
  34. };
  35.  
  36. return {'deptVM': viewModel};
  37. };
  38. }

  oj.Model.extend方法:

  1. oj.Model.extend({
  2. // 可选
  3. // parse : 用于从数据服务中返回JSON数据对象的回调函数。
  4. // parseSave: 用于允许转换的用户回调函数模型返回到适用于保存调用的数据服务格式。
  5. // urlRoot:用于从数据服务中收集数据的URL
  6. })

  

  2.定义上述使用的单个数据模型的集合 oj.Collection.entend() 。

  将集合限制为50个数据。

  1. define(['ojs/ojcore', 'knockout', 'ojs/ojmodel'],
  2. function(oj, ko){
  3. function viewModel() {
  4. var self = this;
  5. self.serviceURL = 'http://RESTServerIP:Port/stable/rest/Departments';
  6. self.Departments = ko.observableArray([]);
  7. self.DeptCol = ko.observable();
  8. self.datasource = ko.observable();
  9. var parseDept = function(response) {
  10. ... contents omitted
  11. };
  12.  
  13. var Department = oj.Model.extend({
  14. urlRoot: self.serviceURL,
  15. parse: parseDept,
  16. idAttribute: 'DepartmentId'
  17. });
  18.  
  19. var myDept = new Department();
  20.  
  21. // 使用oj.Model.extend()定义的模型形成集合对象,限制50个数据
  22. var DeptCollection = oj.Collection.extend({
  23. url: self.serviceURL + "?limit=50",
  24. model: myDept
  25. });
  26. self.DeptCol(new DeptCollection());
  27. self.datasource(new oj.CollectionTableDataSource(self.DeptCol())); // oj.CollectionTableDataSource 转换成需要使用的table数据类型
  28.  
  29. }
  30. return {'deptVM': viewModel};
  31. }
  32. );

  

  3.使用oj.Collection.fetch()从服务器端获取数据(从服务器获取任务,并在完成时进一步处理)

  1. define(['ojs/ojcore', 'knockout', 'ojs/ojmodel'],
  2. function(oj, ko){
  3. function viewModel() {
  4. var self = this;
  5. self.serviceURL = 'http://RESTServerIP:Port/stable/rest/Departments';
  6. self.Departments = ko.observableArray([]);
  7. self.DeptCol = ko.observable();
  8. self.datasource = ko.observable();
  9. self.fetch = function(successCallBack) {
  10. self.DeptCol().fetch({
  11. success: successCallBack,
  12. error: function(jqXHR, textStatus, errorThrown){
  13. console.log('Error in fetch: ' + textStatus);
  14. }
  15. });
  16. }
  17. var parseDept = function(response) {
  18. ... contents omitted
  19. };
  20.  
  21. var Department = oj.Model.extend({
  22. urlRoot: self.serviceURL,
  23. parse: parseDept,
  24. idAttribute: 'DepartmentId'
  25. });
  26.  
  27. var myDept = new Department();
  28.  
  29. var DeptCollection = oj.Collection.extend({
  30. url: self.serviceURL + "?limit=50",
  31. model: myDept
  32. });
  33.  
  34. self.DeptCol(new DeptCollection());
  35. self.datasource(new oj.CollectionTableDataSource(self.DeptCol()));
  36.  
  37. }
  38. return {'deptVM': viewModel};
  39. }
  40. );

  完。

  另外: 一般可以使用  var collection = new oj.Collection( null, { url: XXXXXXX }) 方法获取JSON数据

  但从 oj.Collection 获取的数据不能直接使用。需要转换才能使用。

  转换方法:

  1.使用 oj.KnockoutUtils.map()

    this.datasource = oj.KnockoutUtils.map(collection);

  2.    this.datasource = collection.map( function( model ) {

       return model.attributes;

    } );

  3. 使用特别的API,如 oj.CollectionDataGridDataSource

  

Oracle JET Model 数据获取与使用的更多相关文章

  1. Oracle JET 起步

    Oracle JET介绍 Oracle JET是一个用于经验丰富的JavaScript开发人员构建客户端的基于JavaScript的应用程序的工具包.(抱歉本人对JavaScript绝对是从零开始) ...

  2. Oracle JET(一)Oracle JET介绍

    Oracle JET (Oracle Javascript Extension Toolkit)是一款 Oracle 的 JavaScript 拓展工具包.简单来说 Oracle JET 是一个一堆好 ...

  3. Oracle JET mobile cordove navigator.app对象

    在使用 Oracle JET 开发 webapp 时,会使用到 ojrouter ,ojrouter 默认含有历史记录推送功能.在调试 Android 时会发现返回键总是返回到上一次浏览记录(App ...

  4. Oracle JET mobile 入门使用

    Oracle JET 框架能开发 window, Android, ios 的 WebApp .主要使用 Codova 来进行开发. 简单使用 Oracle JET 开发 Android webapp ...

  5. Oracle JET Router 与 Module 数据传递

    Oracle JET 组件间数据传递方法. 路由:父路由:customers Router  子路由: cust Router 这里 Router 和 module 结合使用. customer 包括 ...

  6. Oracle JET 单页面应用程序Router 使用(上)

    单页面应用程序:使用一个进加载一次的网页,如果页面由于用户的交互而改变,则仅绘制更改的页面部分. 要创建单页面应用程序需要使用 oj.Router 的虚拟导航来支持,ojModule 用来响应页面的重 ...

  7. Oracle JET 使用RequireJS第三方工具或库引入

    在 Oracle JET 应用程序中使用 RequireJS 添加第三方工具或库. 步骤: 1.如果使用工具框架脚手架,需要一下操作. a.使用 npm 安装你需要的库. npm install my ...

  8. Oracle JET(三)Oracle JET 响应布局

    Oracle JET 提供了一系列的 CSS 样式以直接使用. Oracle JET CSS样式链接:http://docs.oracle.com/middleware/jet310/jet/refe ...

  9. Oracle JET(二)Oracle JET使用

    Oracle JET 开发分为 Web 应用程序开发和移动应用程序开发(WebApp). Oracle JET Web 应用程序开发入门: 使用方法三种: 使用 Oracle JET Yeoman 生 ...

随机推荐

  1. php 数组助手类

    ArrayHelper.php <?php /** * php 数组助手类 * Class ArrayHelper * @package app\helper */ class ArrayHel ...

  2. 32-第3章 数据链路层--抓包分析数据帧格式-ISO一图了然-小结

    OSI理论模型 层级 名称 事物举例 功能 数据单位 别名 数据组成 协议举例 7 应用层 QQ.OA 网络通信 上层数据 上层数据 HTTP/FTP/DNS 6 表示层 web数据压缩.https加 ...

  3. java.lang.ClassNotFoundException: org.apache.jsp.login_jsp

    <span style="font-family: Simsun; background-color: rgb(255, 255, 255);">想必大家在用Eclip ...

  4. 爬虫获取网页数据,报错:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start by

    https://blog.csdn.net/hj_xy_0705/article/details/85011072

  5. AT&T推出云5G网络开源工具Airship

    导读 AT&T新推出的云5G网络依赖于一个名为“Airship”的开源供应工具,该工具在周一发布了第一个版本. AT&T负责网络云的副总裁Amy Wheelus告诉LightReadi ...

  6. html 常用小技巧

    style = "cursor:pointer;" 变小手 a{ text-decoration:none; } 或者把这个属性分别加到a标签下, a:link{ text-dec ...

  7. 001-cut 的用法

    [root@zabbix ~]# , /etc/passwd root: bin: daemon: adm: shutdown: halt: mail: operator: games: nobody ...

  8. jmeter做websocket协议的接口测试

    1.首先介绍一下我们要测试的接口的业务流程: (1)http协议登录,登录成功获取一个clientsessionid,时效30Min (2)用这个clientsessionid+登陆的用户名建立连接s ...

  9. Codeforces 976 正方格蛇形走位 二维偏序包含区间 度数图构造 贪心心火牧最大dmg

    A #include <bits/stdc++.h> using namespace std; typedef unsigned long long ull; int main() { i ...

  10. Maven工程构建

    Maven 相关术语: 本地资源库:用来存储项目的依赖库,默认的文件夹是 “.m2” 目录 中央存储库: 用来下载所有项目的依赖库的默认位置 Maven pom.xml: 项目对象模型(Project ...