[AFUI]App Framework Plugins
------------------------------------------------------------------------------------------------------------
App Framework - 查询选择器库
App Framework 是一个异常快速的查询选择器库,从一开始就是针对移动设备而建。识别早期已经存在的像jQuery*和ZeptoJS*框架制定的基础原理,我们确定了加速性能的方式,只实现必要的API。我们目前为含jQuery*兼容语法的App Framework支持超过60+个API,全部列表在这里。
(http://app-framework-software.intel.com/documentation.php#App Framework/af_about)
插件
App Framework插件是可重用的JavaScript*代码块,来帮助增强你的应用。它们可以被用来执行平凡的任务或创建复杂的用户界面组件。你可以创建两种类型的插件。
- 不在对象上操作的实用插件
- 在"存储桶"/元素上操作的插件
如果你已经有了一个使用我们实现了方法的jQuery*插件,你的代码应相当容易过渡。对大部分,你只需要在IIFE(立即调用的函数表达式)中改变引用从"jQuery"到"jq"。
为App Framework创建一个插件
首先,文档将说明创建插件的基础结构,接下来演示怎样创建一个实用的插件。最后本页将分享如何在"存储桶"中的元素上面创建一个插件。
创建插件第一步是创建一个IIFE(立即调用的函数表达式)并扩展$.fn object. 例如:
(function($){
$.fn.myPlugin=function(){
};
})(af)
上面的代码创建了一个可以使用$().myPlugin()返回对象访问的简单方法。当在插件里操作时,这里有一些提示需要记住。
- JavaScript*变量"this"将变成主要的App Framework对象。
- 要启用链式,插件必须返回"this"。
下一步,这里有一个不在对象上操作来制作一个实用插件的例子。
(function($){
$.foo=function(){
alert("bar");
};
})(af)
调用$.foo()来访问这个方法。一旦它被执行,将弹出文本"bar"。这个插件可以链接。这里有一个例子,怎样写一个方法来链接它自己并计算在链接中一个本地计数器变量的执行数目。
(function($){
var counter=0;
$.foo=function(){
alert("Counter = "+counter);
counter++;
return this;
};
})(af);
当上面简单的代码执行了,第一次它将显示并弹出"Counter = 0"。下一次它执行将显示并弹出"Counter = 1",等等。注意"return this"部分,这允许我们链接命令,所以我们可以用$.foo().foo()运行它;
最后,这里有一个在HMTL元素上操作的插件例子。在这个例子中,代码将获取文档中所有元素的innerHTML值 并 在弹出框中显示。
(function($){
var counter=0;
$.foo=function(){
var str="";
for(var i=0;i<this.length;i++)
{
str+=this[i].innerHTML;
str+=" | ";
}
alert(str);
return this;
};
})(af)
上面的插件例子通过执行$("div").foo()能够弹出所有div元素的内容。
这里有一个更高级的插件。这个插件在你指定的区域中创建一个Google* Maps对象。它缓存Google Maps对象,所以后来你可以访问它们。
// @author Ian Maffett
// @copyright App Framework 2012 (function () {
var gmapsLoaded = false; //internal variable to see if the google maps API is available //We run this on document ready. It will trigger a gmaps:available event if it's ready
// or it will include the google maps script for you
$(document).ready(function () {
if(window["google"]&&google.maps){
$(document).trigger("gmaps:available");
gmapsLoaded = true;
return true;
}
var gmaps = document.createElement("script");
gmaps.src = "http://maps.google.com/maps/api/js?sensor=true&callback=gmapsPluginLoaded";
$("head").append(gmaps);
window["gmapsPluginLoaded"] = function () {
$(document).trigger("gmaps:available");
gmapsLoaded = true;
}
}); //Local cache of the google maps objects
var mapsCache = {}; //We can invoke this in two ways
//If we pass in positions, we create the google maps object
//If we do not pass in options, it returns the object
// so we can act upon it. $.fn.gmaps = function (opts) {
if (this.length == 0) return;
if (!opts) return mapsCache[this[0].id];
//Special resize event
if(opts=="resize"&&mapsCache[this[0].id])
{
return google.maps.event.trigger(mapsCache[this[0].id], "resize");
} //loop through the items and create the new gmaps object
for (var i = 0; i < this.length; i++) {
new gmaps(this[i], opts);
}
}; //This is a local object that gets created from the above.
var gmaps = function (elem, opts) {
var createMap = function () {
if (!opts || Object.keys(opts).length == 0) {
opts = {
zoom: 8,
center: new google.maps.LatLng(40.010787, -76.278076),
mapTypeId: google.maps.MapTypeId.ROADMAP
}
}
mapsCache[elem.id] = new google.maps.Map(elem, opts);
google.maps.event.trigger(mapsCache[elem.id], 'resize');
} //If we try to create a map before it is available
//listen to the event
if (!gmapsLoaded) {
$(document).one("gmaps:available", function () {
createMap()
});
} else {
createMap();
}
}
})(af);
@黑眼诗人 <www.farwish.com>
译自:http://app-framework-software.intel.com/documentation.php#App Framework/af_plugins
[AFUI]App Framework Plugins的更多相关文章
- [AFUI]App Framework
---------------------------------------------------------------------------------------------------- ...
- [AFUI]App Framework Quickstart
---------------------------------------------------------------------------------------------------- ...
- [Learn AF3]第三章 App Framework 3组件之Panel:afui的核心
Panel,afui的核心组件 组件名称:Panel 使用说明:按照官方的说法,panel组件是af3的“核心(heart of the ui)”,panel用于构造应用中独立的内容展示区域, ...
- [译]Intel App Framework 3.0的变化
App Framework 3.0 原文 IAN M. (Intel) 发布于 2015-02-11 05:24 我们高兴地宣布App Framework 的新版本3.0发布了.你可以获得最新的代码 ...
- 【App FrameWork】页面之间的参数传递
若应用中有多个页面,这时2个页面之间可能需要进行参数传递.那么如何来实现呢? 首先想到的就是URL参数传递的方式,如:在panel里设置属性 data-defer="Pages/Shake. ...
- 【App FrameWork】框架的页面布局
之前主要用JqueryMobile+PhoneGap的模式开发移动应用,但JQueryMobile自身存在的硬伤太多,如加载速度缓慢,页面转场白屏.闪烁,头尾部导航浮动问题,页面滚动等等,用户体验效果 ...
- [Learn AF3]第七章 App framework组件之Popup
AF3的弹出对话框Popup 组件名称:Popup 是否js控件:是,$.afui.popup 说明:af3中的popup和af2中相比变化不大,依然是通过插件popup来实现的 方法 ...
- [Learn AF3]第四章 App framework组件之Button
Button 组件名称:Button 是否js控件:否 使用说明:如果说panel组件是af3的“核心(heart of the ui)”,那么Button就是af中的五虎上将之 ...
- [Learn AF3]第五章 App Framework 3组件之Drawer——Side Menu
Drawer——Side menu 组件名称:Drawer 说明:af3中的side menu和af2中有很大变化,af3中的side menu实际上是通过插件$.afui.drawer来实现 ...
随机推荐
- 获取网页URL地址及参数等的两种方法(js和C#)
转:获取网页URL地址及参数等的两种方法(js和C#) 一 js 先看一个示例 用javascript获取url网址信息 <script type="text/javascript&q ...
- [Freescale]E9学习笔记-LTIB安装配置
转自:http://blog.csdn.net/girlkoo/article/details/44535979 LTIB: Linux Target Image Builder Freescale提 ...
- SVN 主干(trunk)、分支(branch )、标记(tag)
主干(trunk).分支(branch ).标记(tag) 在SVN中Branch/tag在一个功能选项中,在使用中也往往产生混淆. 在实现上,branch和tag,对于svn都是使用copy实现的, ...
- 黄聪:WordPress图片插件:Auto Highslide修改版(转)
一直以来很多人都很喜欢我博客使用的图片插件,因为我用的跟原版是有些不同的,效果比原版的要好,他有白色遮罩层,可以直观的知道上下翻图片和幻灯片放映模式.很多人使用原版之后发现我用的更加帅一些,于是很多人 ...
- JQuery validate 在IE兼容模式下出现 js错误(成员找不到)的修正:
JQuery validate 在IE兼容模式下 下出现 js错误(成员找不到)的修正: // Add novalidate tag if HTML5. //this.attr( "nova ...
- RAC_Oracle集群服务安装RAC(案例)
2015-01-23 Created By BaoXinjian Thanks and Regards
- 2016 Multi-University Training Contest 5 Divide the Sequence
Divide the Sequence 题意: 给你一个序列A,问你最多能够分成多少个连续子序列,使得每个子序列的所有前缀和均不小于0 题解: 这题是比赛时候的水题,但我比的时候也就做出这一题, = ...
- [复变函数]第05堂课 1.4 复球面与 $\infty$; 作业讲解; 2 解析函数 2.1 解析函数的概念与 Cauchy-Riemann 方程
1. 复球面 大漠孤烟直, 长河落日圆. $$\bex \bbC\cong \bbS^2\bs \sed{N},\quad \bbC_\infty=\bbC\cup \sed{\infty}\mbox ...
- 关于maven的一些常见用法
1: 查看插件的目标信息:mvn help:describe 2: 生成javadoc并指定编码:mvn javadoc:javadoc -Dencoding=UTF-8 -Dcharset=UTF- ...
- 关于centos7下扩充和减小xfs逻辑分区大小的问题
比如,我想把/dev/centos/home下的50G变为8G 1.增加 1.1 去掉挂载 umount /home 1.2 减小home, lvreduce -L 8G /dev/centos/ho ...