[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来实现 ...
随机推荐
- 【Spring学习笔记-MVC-18.1】Spring MVC实现RESTful风格-同一资源,多种展现:xml-json-html
概要 要实现Restful风格,主要有两个方面要讲解,如下: 1. 同一个资源,如果需要返回不同的形式,如:json.xml等: 不推荐的做法: /user/getUserJson /user/get ...
- C语言每日一题之No.9
再做决定之前,我还是做好自己该做的.我不希望几年后会悔恨自己为什么在最该努力的时候不愿意吃苦.尊敬的女王陛下,请接题: 一.题目:有已按升序排好顺序的字符串a,编写程序将字符串s中的每个字符按升序的规 ...
- spring4.0整合mongodb3.0.4项目实践(用户验证)
我们的项目用到了spring框架和mongdb数据库,随着mongodb升级到3.0已有半年时间,我们也开始随之升级,但是3.0的用户验证有所更改,导致原来的很多配置无法再用. 经过几天的尝试后,终于 ...
- 黄聪:怎么清理win7、win8更新垃圾(winsxs目录清理)
windows 系统(特别是Win8系统)在使用了一段时间后,发现C盘的空间降的好厉害,显然,有大量不该存在的文件还继续停留在硬盘里.究其原因,在于系统目录下的WinSxS目录占用了大量的空间!在我们 ...
- 黄聪:jquery mobile使用form进行post提交表单没有反应,显示空白页解决方案
jquery mobile这货会自动用Ajax方式. 所以需要在表单form标签添加data-ajax="false"这个元素. <form method="pos ...
- 黄聪:如何用Jquery或者插件解除网页禁用右键复制的限制(转)
1.随便打开一个网址,放到收藏夹中. 2.复制下面的代码,替换原来网址的URL 选中复制以下代码 javascript:(function(){var doc=document;var bd=doc. ...
- 三. ServerSocket用法
一.构造ServerSocket 构造方法 (1)new ServerSocket( ) (2)new ServerSocket(int port,int backlog) (3)new Server ...
- Spring Tool Suite中的Tomcat启动状态修改java代码保存立刻生效
- DBA_Oracle Erp重启Database/Application/Concurrent/Apache(案例)
2014-12-27 Created By BaoXinjian
- Report_SRW在RDF中初始化的重要性(案例)
2015-02-01 Created By BaoXinjian 一.摘要 在开发oracle report(report 6i)的时候,常常会用到fnd_global或fnd_profile来获取当 ...