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 数据

{
"Departments" : [ {
"DepartmentId" : 10,
"DepartmentName" : "Administration",
"ManagerId" : null,
"LocationId" : null,
"version" : "ACED00057...contents truncated",
"links" : {
"self" : {
"rel" : "self",
"href" : "http://RESTServerIP:Port/stable/rest/Departments/10"
},
"canonical" : {
"rel" : "canonical",
"href" : "http://RESTServerIP:Port/stable/rest/Departments/10"
},
"Employees" : {
"rel" : "child",
"href" : "http://RESTServerIP:Port/stable/rest/Departments/10/Employees"
}
}
}, {
"DepartmentId" : 20,
"DepartmentName" : "Retail Marketing",
"ManagerId" : null,
"LocationId" : null,
"version" : "ACED00057...contents truncated",
"links" : {
"self" : {
"rel" : "self",
"href" : "http://RESTServerIP:Port/stable/rest/Departments/20"
},
"canonical" : {
"rel" : "canonical",
"href" : "http://RESTServerIP:Port/stable/rest/Departments/20"
},
"Employees" : {
"rel" : "child",
"href" : "http://RESTServerIP:Port/stable/rest/Departments/20/Employees"
}
}
}, {
... contents omitted
} ],
"links" : {
"self" : {
"rel" : "self",
"href" : "http://RESTServerIP:Port/stable/rest/Departments"
}
},
"_contextInfo" : {
"limit" : 25,
"offset" : 0
}
}

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

  在viewmodel中添加JS代码:

  

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

define(['ojs/ojcore', 'knockout', 'ojs/ojmodel'],
function(oj, ko)
{
function viewModel() {
var self = this;
self.serviceURL = 'http://RESTServerIP:Port/stable/rest/Departments'; // 一个JSON地址        // 回调函数,用于在从数据服务返回时对JSON数据对象进行解析,形成单个数据模型。
parseDept = function(response) {
if (response['Departments']) {
var innerResponse = response['Departments'][0];
if (innerResponse.links.Employees == undefined) {
var empHref = '';
} else {
empHref = innerResponse.links.Employees.href;
}
return {DepartmentId: innerResponse['DepartmentId'],
DepartmentName: innerResponse['DepartmentName'],
links: {Employees: {rel: 'child', href: empHref}}};
}
return {DepartmentId: response['DepartmentId'],
DepartmentName: response['DepartmentName'],
LocationId:response['LocationId'],
ManagerId:response['LocationId'],
links: {Employees: {rel: 'child', href: response['links']['Employees'].href}}};
};
var Department = oj.Model.extend({
urlRoot: self.serviceURL,
parse: parseDept,
idAttribute: 'DepartmentId'
}); var myDept = new Department();
}; return {'deptVM': viewModel};
};
}

  oj.Model.extend方法:

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

  

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

  将集合限制为50个数据。

define(['ojs/ojcore', 'knockout', 'ojs/ojmodel'],
function(oj, ko){
function viewModel() {
var self = this;
self.serviceURL = 'http://RESTServerIP:Port/stable/rest/Departments';
self.Departments = ko.observableArray([]);
self.DeptCol = ko.observable();
self.datasource = ko.observable();
var parseDept = function(response) {
... contents omitted
}; var Department = oj.Model.extend({
urlRoot: self.serviceURL,
parse: parseDept,
idAttribute: 'DepartmentId'
}); var myDept = new Department(); // 使用oj.Model.extend()定义的模型形成集合对象,限制50个数据
var DeptCollection = oj.Collection.extend({
url: self.serviceURL + "?limit=50",
model: myDept
}); self.DeptCol(new DeptCollection());
self.datasource(new oj.CollectionTableDataSource(self.DeptCol()));
// oj.CollectionTableDataSource 转换成需要使用的table数据类型 }
return {'deptVM': viewModel};
}
);

  

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

define(['ojs/ojcore', 'knockout', 'ojs/ojmodel'],
function(oj, ko){
function viewModel() {
var self = this;
self.serviceURL = 'http://RESTServerIP:Port/stable/rest/Departments';
self.Departments = ko.observableArray([]);
self.DeptCol = ko.observable();
self.datasource = ko.observable();
self.fetch = function(successCallBack) {
self.DeptCol().fetch({
success: successCallBack,
error: function(jqXHR, textStatus, errorThrown){
console.log('Error in fetch: ' + textStatus);
}
});
}
var parseDept = function(response) {
... contents omitted
}; var Department = oj.Model.extend({
urlRoot: self.serviceURL,
parse: parseDept,
idAttribute: 'DepartmentId'
}); var myDept = new Department(); var DeptCollection = oj.Collection.extend({
url: self.serviceURL + "?limit=50",
model: myDept
}); self.DeptCol(new DeptCollection());
self.datasource(new oj.CollectionTableDataSource(self.DeptCol())); }
return {'deptVM': viewModel};
}
);

  完。

  另外: 一般可以使用  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. Tensorflow API 学习(1)-tf.slice()

    slice()函数原型为: tf.slice(input_, begin, size, name=None) 函数有4个参数: 1,input_ :图片的矩阵输入格式. 2,begin :开始截取的位 ...

  2. vue中使用stylus编写css

    安装步骤 cnpm install stylus --save-dev cnpm install stylus-loader --save-dev 写法如下: <style lang=" ...

  3. 72. Edit Distance (JAVA)

    Given two words word1 and word2, find the minimum number of operations required to convert word1 to  ...

  4. Codeforces 965 枚举轮数贪心分糖果 青蛙跳石头最大流=最小割思想 trie启发式合并

    A /*#include<cstring>#include<algorithm>#include<queue>#include<vector>#incl ...

  5. squid之------基础知识

    squid是什么? 缓存服务器,即用来存储(内存及硬盘)用户访问的网页.图片.文件等等信息的专用服务器,这种服务器不仅可以使用户最快的得到他们想要的信息,而且大大减少了网络传输的数据量,缓存服务器经常 ...

  6. C++与C#对于引用外部文件成员使用的区别

    对于C++控制台项目,如果有两个.cpp的文件都想引用同一个类的成员时,我们可以定义一个类,然后在类的头文件中添加extern来修饰. Box.cpp如下: #include "Box.h& ...

  7. 基于python的知乎开源爬虫 zhihu

    今天在无意之中发现了一个知乎的开源爬虫,是基于Python的,名字叫zhihu_oauth,看了一下在github上面star数还挺多的,貌似文档也挺详细的,于是就稍微研究了一下.发现果然很好用啊.就 ...

  8. UI控件Telerik UI for ASP.NET MVC全新发布R2 2019 SP1

    Telerik UI for ASP.NET MVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验.它主要是针 ...

  9. 错误:The selected wizard could not be started Plug-in com.genuitec.eclipse.j2ee.ui was unable to load class com.genuitec.eclipse.j2ee.ui.wizard.WebProjectWizard

    错误:The selected wizard could not be started Plug-in com.genuitec.eclipse.j2ee.ui was unable to load ...

  10. 《SaltStack技术入门与实践》—— Grains

    Grains 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前几章我们已经了解SaltStack各个组件以及通过一个案例去熟悉它的各种应用,从这章开 ...