------------------------------------------------------------------------------------------------------------

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的更多相关文章

  1. [AFUI]App Framework

    ---------------------------------------------------------------------------------------------------- ...

  2. [AFUI]App Framework Quickstart

    ---------------------------------------------------------------------------------------------------- ...

  3. [Learn AF3]第三章 App Framework 3组件之Panel:afui的核心

    Panel,afui的核心组件 组件名称:Panel     使用说明:按照官方的说法,panel组件是af3的“核心(heart of the ui)”,panel用于构造应用中独立的内容展示区域, ...

  4. [译]Intel App Framework 3.0的变化

    App Framework 3.0 原文 IAN M. (Intel) 发布于 2015-02-11  05:24 我们高兴地宣布App Framework 的新版本3.0发布了.你可以获得最新的代码 ...

  5. 【App FrameWork】页面之间的参数传递

    若应用中有多个页面,这时2个页面之间可能需要进行参数传递.那么如何来实现呢? 首先想到的就是URL参数传递的方式,如:在panel里设置属性 data-defer="Pages/Shake. ...

  6. 【App FrameWork】框架的页面布局

    之前主要用JqueryMobile+PhoneGap的模式开发移动应用,但JQueryMobile自身存在的硬伤太多,如加载速度缓慢,页面转场白屏.闪烁,头尾部导航浮动问题,页面滚动等等,用户体验效果 ...

  7. [Learn AF3]第七章 App framework组件之Popup

    AF3的弹出对话框Popup 组件名称:Popup 是否js控件:是,$.afui.popup     说明:af3中的popup和af2中相比变化不大,依然是通过插件popup来实现的     方法 ...

  8. [Learn AF3]第四章 App framework组件之Button

    Button    组件名称:Button     是否js控件:否     使用说明:如果说panel组件是af3的“核心(heart of the ui)”,那么Button就是af中的五虎上将之 ...

  9. [Learn AF3]第五章 App Framework 3组件之Drawer——Side Menu

    Drawer——Side menu 组件名称:Drawer     说明:af3中的side menu和af2中有很大变化,af3中的side menu实际上是通过插件$.afui.drawer来实现 ...

随机推荐

  1. SPOJ #692. Fruit Farm

    Another palindrome related problem. Actually nothing too theoretical here, but please keep following ...

  2. bzoj3036: 绿豆蛙的归宿

    Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每 ...

  3. WIN 8.1 x64 环境下 COM Surrogate 停止工作解决方案

    我的笔记本电脑是THINKPAD T420 4180AT8,NVIDIA NVS 4200M,Intel(R) HD Graphics 3000,WIN 8.1 x64操作系统.在安装完NVIDIA独 ...

  4. 【freemaker】之自定义变量,特殊变量 globals ,循环对象取值

    entity public class Employee { private Integer id; private String name; private Integer age; private ...

  5. C语言每日一题之No.4

    这几天老大也没安排我什么项目,于是想正好趁着空补C.当然,是利用晚上加班时间,白天正常上班时间还是学习公司的平台. 今儿个突然弱弱的感觉到在公司补C是件很低级的事情,哪怕是在加班时间都会被喷,因为大家 ...

  6. Service代码示例

    package com.homily.training.service; import android.app.Service; import android.content.Intent; impo ...

  7. 使用Spring的命名空间p装配属性-摘自《Spring实战(第3版)》

    使用<property>元素为Bean的属性装配值和引用并不太复杂.尽管如此,Spring的命名空间p提供了另一种Bean属性的装配方式,该方式不需要配置如此多的尖括号. 命名空间p的sc ...

  8. IREP_SOA Integration WSDL概述(概念)

    20150827 Created By BaoXinjian

  9. NeHe OpenGL教程 第十一课:飘动的旗帜

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  10. HTML番外整理

    经过一周的个人项目与一周的团体项目,我学到了一些有用的内容,特分享如下: 一.视频 1.对在线视频的添加 在各大网站打开一个视频,在下方的分享找到HTML代码,然后复制HTML代码到自己的代码中. 2 ...