1. 反应式操作符 Reactive Operators
原始的Observable发生变化,则反应式操作符定义的相应的Observable也会发生变化。这就反应式操作符的及时反应特性。
同事需要注意的是,只有当最后生成的Observable是被使用的,比如数据绑定或是需要它的值,反应式操作才会计算出结果
去生成这个Observable的值。
1.1 where(condition)
将条件为真的值,返回为一个新的Observable。
新的Observable时刻观察这旧的Observable,一旦旧的发生变化,会立即反应的新的(更)。
var cars= Observable(
{ name: 'toyota', money:'100' },
{ name: 'hoda' , money:'100' },
{ name: 'benchi', money:'1000' },
{ name: 'baoma' , money:'1000' });
var goodCars = cars.where(function(e){
return e.money == '1000';
});
1.2 map(function)
将Observable里面的每一个值调用一遍指定函数,结果返回为一个新的Observable。
var numbers = Observable(1, 3, 5);
var sqrts = numbers.map(function(number) {
return Math.sqrt(number);
});
1.3 count()
返回对象Observable的值的数量。
1.4 count(condition)
返回指定条件为真的 值的数量。
1.5 not()
返回相反值。
1.6 filter(condition)
通过指定条件的才会返回一个变种的Observable,否则保持原来的值。
1.7 expand(function)
将一个只包含一个数组的Observable拆散,再重新按数组值组合成一个新的Observable。
2. 订阅更新 Subscribing to Updates
2.1 addSubscriber(function)
当对象Observable发生变化时,执行指定的function
2.2 removeSubscriber(function)
对一个Observable操作完成后,要删除该订阅subscription,不然内存垃圾会越来越多。
3. 其它
3.1 depend();
3.2 failed(message);
3.3 setValueExclusive(value, excludingObservable) 给某个Observable设value值,且不通知excludingObservable订阅者。
3.4 toString() 返回一个描述改Observable的字符串。
列:var testObs = Observable("one","2","one"); testObs.toString(); //返回 “(Observable) one,2,one”
4. 应用
Observable可以用来做很多事。
主要有: 数据绑定Data Binding,异步编程, 反应式编程
4.1 应用程序编程接口 APIs
4.1.1 Polyfills兼容代码。 提供一些特色功能,典型的就是浏览器功能。
4.1.2 fetch 实现HTTP Request的方式
如下,JS对象(requestObject)转成一个JSON数据,通过PSOT的方式提交,然后服务端返回JSON数据,
再转回一个JS对象。
var sts = 0;
var responseFlg = false;
fetch('http://baidu.com', {
method:'POST',
headers: {"Content-type":"application.json"},
body: JSON.stringify(requestObject) //JS对象转成一个JSON数据
}).then(function(response) {
sts = response.status; //Get HTTP status code
responseFlg = response.ok; //Is response.status in the 200-range?
return response.json(); // This returns a promise 服务端返回JSON数据
}).then(function(responseObject) {
// Do something with the result
}).catch(function(err) {
// An error occured parsing Json
});
4.1.3 FuseJS支持XMLHttpRequest,支持promise
4.1.4 setTimeout(function,延迟时间)
设置延时执行。
4.1.5 Storage 可以用来将文本保存为应用目录下的文件。
4.1.5.1 write 将字符串写入到指定文件。
列: var storage = require('FuseJS/Storage');
storage.write(fileName, 要写入的字符串); //返回一个含有布尔值的promise,表示是否写入成功,
4.1.5.2 read 返回一个含文件内容的字符串的promise
storage.read(对象文件).then ( function(context) {
console.log(context);
}, function(error) {
console.log(error);
});
4.1.5.3 writeSync 同步写入数据到指定文件,成功则返回true。
因为是同步写入,容易堵塞。所以写入大量数据时使用write比较好。
4.1.5.4 readSync 同步读。 deleteSync同步删除
4.1.6 Lifecycle 生命周期
var lifecycle = require('FuseJS/Lifecycle'); //声明一个lifecycle对象
lifecycle.onEnteringForeground = function () {
initialize();
};
APP的开始事件是隐式的,就是当JS代码都一次被解释时,得到onEntringForeground开始事件。
*onEnteringForeground App脱离挂起状态,开始运行。App开始时可以得到改事件。
*onEnteringBackground App脱离运行状态,将被挂起。
*onEnteringInteractive App进入高速交互状态,开始接受事件。
*onExitedInteractive App部分被遮盖或者不再是焦点状态。
*onTerminating App将被关闭。
4.1.7 Phone var phone = require('FuseJS/Phone'); phone.call("电话号码");
4.1.8 Camera var camera = require('FuseJS/Camera');
调用Camera操作设备的摄像头。有相应的函数方法对应相应的操作。如:camera.takePicture({宽,高,朝向})
4.1.9 Vibration var vibration = require('FuseJS/Vibration'); vibration.vibrate(0.8); //震动0.8秒
4.1.10 InterApp 专门为简化App间通信而设计的模块。
目前干两件事: 1. 通过一个URi启东另一个App, 2. 接收另一个App的URi请求
*URI: 统一资源标识符。Universal Resource Inditifier
var interApp = require('FuseJS/InterApp');
interApp.lanchUri('test://myFuse/appUri'); // 请求系统打开目标App
interApp.onReceivedUri 这事一个回调函数。用来告知其它App正在用一个Uri调用你的App。
要接收这个通知首先App里面要定义一个Uri Scheme。
Fuse里很简单,只要在unoProj文件的Mobile字段上加上一个UriScheme元素。
"Mobile" { "UriScheme": "partOfUri"}
每当设备上有一个含partOfUri字段的Uri被打开时,你的App就会被打开。并用完成的Uri调用onReceivedUri。
当这个调用发生时,如果App已经打开了onReceivedUri,这时设备会短暂的脱离交互模式。
interApp.onReceivedUri = function(uri) { console.log("received uri:" + uri); };