- 浏览: 160241 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
坏猪猪:
Document doc = Jsoup.connect(ur ...
android中jsoup解析html的几个例子 -
我很温柔但是不丑:
你好。看了您的例子,实践了一下,有问题啊?没有解析出来数据?怎 ...
android中jsoup解析html的几个例子
Base类被设计成基础类,YUI库中attribute-base和event target-base的类都衍生自Base类。Base类为在YUI、库中创建的attribute-base类提供统一的模板。Base类还提供统一的init()和destroy()序列,来串联类层级中的初始化(initializer)和销毁(destructor)方法。 Base类还通过插件或扩展的方式,提供代码重用的方法。 以下部分详细讲解如何使用Base功能。包含以下内容: 虽然Base类可以被实例化,但是它被设计成基类,用以创建基于Attribute和EventTarget的类。如下: Base类扩充自Attribute类,而Arribute类又扩充自EventTarget类。因此,Base类具有Attibute功能,也是一个事件目标(Event Target)。 Base的构造器接收一个字面量对象,该字面量对象在构造的过程中用来设置属性的初始值。 Base类查找两个静态属性,在类的构造器中必须包含这两个静态属性。在为类设置事件和属性时会使用到这两个静态属性。 NAME属性是用来标识类的字符串。 NAME属性的一个重要用途是用作类实例所发布事件的前缀。比如,由MyClass类实例发布的事件有myClass前缀。前缀约定为类名的驼峰拼写法。 触发自不同类实例、有着相同名字的事件在冒泡或广播时,事件的前缀保证他们的唯一性和可识别性。比如:在某个Menu widget上的click事件,可以通过订阅menu:click事件来辨别;一个Editor的click可以通过editor:click来识别。因为YUI3.x的自定义事件可以冒泡,这样的前缀允许你在一个更高的层面监听来自不同类的事件。也就是说,你可以像在普通的事件目标上监听一样,使用事件代理。例子: NAME属性还在Base的toString的默认实现中使用。 ATTRS属性时一个关联数组(一个有属性/值对的对象),用以定义类实例的默认属性。类层级中的每一个类都定义一组属性以及相应的支持代码,类实例会包含类层级中定义的所有属性。 以下是Drag类中定义的一组属性(部分): 对象字面量中的每一个属性,定义了增加的属性名,以及对应的属性值。更多关于如何构建配置对象请查看Attribute’s discussion of configuration properties。 当初始化一个衍生自Base的类时,Base类的init方法会初始化类层级中每一个类的ATTRS属性定义的属性。这避免在每一个类的constructor/initializer中重复定义属性初始化的代码。 Base类还定义了一个属性初始化顺序,从Base类,到子类。在一个类,ATTRS中定义的属性的顺序是无关紧要的。如果ATTRS中的一个属性在初始化时,需要用到ATTRS后面定义的属性,后面定义的属性会按照需要初始化。 值得注意的是,因为性能方面的原因,Base类惰性地添加或初始化属性。意思是说直到调用set或get方法时,属性才会被初始化。可以通过改变该属性的alazyAdd属性为false,来覆盖默认的惰性行为。(比如某属性的setter方法被用于设置对象中的其他非attribute状态。) Base类实现init和destoy方法,用以建立初始化与销毁这两个生命周期。init方法和destroy方法是不会被Base的子类继承的。扩展自Base类的类通过定义原型级别(prototype-level)的initializer和destructor方法, 可以进行 初始化和销毁操作。如下: Base的init方法和destroy方法负责调用类层级中的initializer方法和destructor方法。每一个类的方法实现不需要调用父类中该方法的实现。Base类确保初始化和销毁过程,根据类的层级按照固定的顺序执行。 Base的构造器调用的init方法, 会为类层级中的每一个类调用initializer方法,次序是从Base类开始到当前被初始化的子类。每一个类的initializer方法会在类的属性被初始化后调用。initializer方法会接收到属性初始化后提供的配置对象。该对象是通过init方法传递给initializer方法的。 destructor Base的destroy方法被调用时,会执行类层级中每一个类的destructor方法。从被实例化创建该实例的子类到Base类。与初始化的顺序相反。 如果你的类在init或destroy过程中,不需要进行任何操作,你就不需要在该类的原型中定义initializer方法和destructor方法。 插件功能可以向衍生自Base类的类实例中添加功能,而不需要把功能写到核心类中。这样的功能允许类实例们混合多种功能,而不需要把这些功能写到一个庞大的类中,或者是为同一序列的功能衍生出很多类。 Plugin.Host类向Base类中添加以下主要方法: 往实例中添加插件与插件配置。plug方法实例化一个插件实例,添加到现有的实例的命名空间(属性)上,该属性名在插件类的NS属性中定义。 plug方法还可以通过数组的方式一次添加多个插件,如下: 从实例中移除插件并将插件销毁。 这两个方法在一个插件实例被创建后,才能使用。还可以在实例化的过程中,通过plugins属性,为实例添加插件,如下: 另外,如果组件开发者希望他的组件中默认添加一些插件,Base.plug方法和Base.unplug方法提供这样的接口,让开发者在类定义中默认添加这些插件。 关于插件的开发见Plugin landing page,Widget IO Plugin, Overlay IO Plugin and Overlay Animation Plugin是插件的好例子。 “MyPlugin” template file 提供插件开发的模板。这个模板是通过衍生Plugin.Base类创建插件类的。 Base类提供一个静态的build方法,通过将一个主类和一个或多个扩展类组合来创建自定义类。 扩展类与插件相似,他们把特定功能的实现封装在扩展类中。但是,扩展是在类的级别上扩展,创建新的类,而插件是在实例的级别上扩展实例。 build方法可以用来动态地创建新类,该新类衍生自一个已存在的主类,并参入新的扩展类来增加方法、attribute、事件、属性。默认情况下,build方法不会改变主类,但是,build方法调用时,可以通过配置,让他改变主类。 build方法的内部实现: 当新建的类被实例化时,在init生命周期中,新类会为新类和扩展类调用构造方法。 除了build方法以外,Base类还提供create方法和mix方法。这两个方法是在build方法之上的 “甜点方法”(sugar methods)。 该方法为创建新类提供一个更简洁的方法,该方法可以传入额外的静态属性\方法和原型属性\方法。调用方式见API。 该方法可以在现有的类上直接添加扩展类。调用方式见API。使用Base功能
扩展Base类
YUI.use(“base”,function(Y){
function MyClass(config){
MyClass.superclass.constructor.apply(this,arguments)
}
Y.extend(MyClass,Y.Base,{});
})
静态属性
YUI.use(“base”,function(Y){
function MyClass(config){
MyClass.superclass.constructor.apply(this,arguments)
}
MyClass.NAME = “myclass”;
MyClass.ATTRS = {};
Y.extend(MyClass,Y.Base,{});
})
NAME
MyClass.prototype.doSometing = function(){
this.fire(“enabled”);
}
var o = new MyClass(cfgs);
o.on(“enabled”,function(){});
o.on(“myClass:enabled”,function(){});
ATTRS
Drag.ATTRS = {
node: {
setter: function(node) {
var n = Y.one(node);
if (!n) {
Y.fail('DD.Drag: Invalid Node Given: ' + node);
}
return n;
}
},
dragNode: {
setter: function(node) {
var n = Y.one(node);
if (!n) {
Y.fail('DD.Drag: Invalid dragNode Given: ' + node);
}
return n;
}
},
offsetNode: {
value: true
},
clickPixelThresh: {
value: DDM.get('clickPixelThresh')
},
...
}; // End of Drag.ATTRS associative array (object literal)
初始化与销毁
Y.extend(MyClass,Y.Base,{
initializer:function(cfg){},
destructor:function(){}
});
initializer()
插件
plug(plugClass,plugConfig);
instance.plug([{fn:AnimPlug,cfg:{duration:2}},{fn:AnimPlug,cfg:{duration:2}}]);
unplug(plugClass)或unplug(namespace)
var overlay = new Overlay({
srcNode:”#module”,
plugins:[{fn:AnimPlug,cfg:{duration:2}}]
});
扩展
BUILD
function Panel(configs){
Panel.superclass.constructor.apply(this,arguments);
}
Panel.ATTRS = {
close:{},
minimize:{},
show:{}
}
Y.extend(Panel,Y.Base,{
show:function(){},
hide:function(){},
minimize:function(){}
});
function Resizable(){
this._initResizable();
}
Resizable.ATTRS = {
handles:{},
constrain:{}
}
Resizable.prototype = {
_initResizable:function(){},
lock:function(){}
}
function Modal(){
this._initModality();
}
Modal.ATTRS = {
modal:{},
region:{}
}
Modal.prototype = {
_initModality:function(){},
showMask:function(){},
hideMask:function(){}
}
var windowPanel = Y.Base.build(“windowPanel”,panel,[Resizable,Modal]);
var wp = new WindowPanel({
show:true,
modal:true,
handles:[“e”,”s”,”es”]
});
wp.lock():
wp.show();
Base.create
Base.mix
发表评论
-
yui3:widget 例子_widget-extend
2011-06-26 16:07 2596<!DOCTYPE HTML PUBLIC &qu ... -
yui3:widget
2011-06-18 11:36 3273Widget 类包含什么? widget类的结构和 ... -
YUI3:node2
2011-06-18 11:23 1YUI的Node功能为获取、 ... -
YUI3:plugin
2011-06-18 10:22 1463插件让你可以无侵入地 ... -
YUI3:Attribute
2011-06-16 10:30 1545YUI的Attribute功能允 ... -
YUI 3:Event
2011-06-15 22:23 15541. 要使用Event,首先要引入YUI3的种子文件: &l ... -
YUI3:Node
2011-06-15 15:59 2221YUI的Node功能为获取、创建、操作DOM节点提供很易懂的方 ... -
yui3 :Get 例子
2011-06-15 15:43 1332Getting a Script Node with JSON ... -
YUI:globle object
2011-06-13 11:52 1671YUI模块是YUI3中的单一核 ... -
YUI3:GET
2011-06-12 22:25 1698Get 工具提供了一个,在 ... -
YUI3:DataSource
2011-06-12 21:53 1326DataSource 工具,通过广泛支持的协议,为从不同的资源 ... -
YUI3:DataSchema
2011-06-12 20:57 913DataSchema Utility 应用一个给定的模式 ,以 ... -
YUI3:Cooke
2011-06-12 16:43 1252YUI Cookie工具为与cookies ... -
yui3 :datatype
2011-06-12 12:02 2124DataType工具为数据, ... -
YUI3:cache
2011-06-12 10:14 1273Cache 工具为存储名值对到本地JavaScript内存提供 ... -
YUI 3 周边
2011-06-11 16:46 11331.跨域请求:cross-domain 初步体验“AJAX不 ... -
YUI 3 :IO
2011-06-10 11:46 2958YUI IO是一个通讯工具,用于数据获取和内容更新,它使用X ... -
YUI 3 : json
2011-06-09 15:37 2655JSON (JavaScript Object ...
相关推荐
在源码中,我们可以看到YUI的核心模块`yui-base`,它是所有其他模块的基础,提供了一些基础功能,如事件处理、DOM操作等。`event`模块是处理用户交互的关键,包括鼠标和键盘事件。而`node`模块则封装了DOM操作,使得...
YUI().use('node-base', 'event-base', function(Y) { // 使用已加载的node-base和event-base模块 }); ``` 通过这些例子,我们可以看出YUI是一个功能全面且灵活的JavaScript库,适用于各种Web开发场景。无论你是...
3. **响应式设计**:确保在不同设备和屏幕尺寸上都能良好工作,可以结合YUI的 Responsive Base 模块进行适配。 总之,YUI Slideshow是一个强大的Ajax幻灯片组件,它集成了Ajax加载、过渡动画和自定义导航等功能,...
YUI().use('io-base', 'json-parse', function (Y) { Y.io('/myAction', { method: 'POST', on: { success: function (xid, response) { var data = Y.JSON.parse(response.responseText); console.log(data)...
#酒店价格日历 ####基于YUI3开发的价格日历组件 @name:Y.PriceCalendar @requires:['node', 'base-base', 'event-mouseenter']
1. **Base Library – YUI Base**:作为基础的JavaScript库,为整个架构提供基本的支持。 2. **Common Library – Kissy**:一个轻量级、简洁实用的JavaScript库,用于扩展基础库的功能。 3. **Taobao Library – ...
在发布时,需要 yuicompressor-2.4.6.jar 这个第三方库来进行代码压缩。 3. TomsTools-tags-x.x.x.jar:提供了 JSP 自定义标签 `<tt:js>` 和 `<tt:css>`,以替代传统的 `<script>` 和 `<link>` 标签,使得可以直接...
8. **服务器端处理**:剪裁后的图片通常以Base64编码的形式发送到服务器,服务器端再将Base64字符串转换为二进制文件,保存为新的图片。这个过程可能涉及AJAX请求,使用jQuery的`$.ajax()`或`$.post()`方法。 9. **...
Basebox是dojo开发的框架,它包含一个简单的小部件API,您可以使用它来创建新的小部件或包装来自小部件库(例如Dojo,YUI,Zapatec或WebFX中的那些)的现有小部件。
3. **JavaScript Profile 支持**:支持多种 JavaScript 库和框架的 Profile 设置,例如 ExtJS、jQuery 和 YUI。 4. **Flash 脚本支持**:能够在 Spket IDE 中编辑 Flash 脚本。 5. **xpcom 支持**:用于跨平台组件...
这个名为"ECMAScriptBestPractices"的项目,显然是基于Crockford的思想和他在YUI(Yahoo! User Interface Library)系列讲座中的讲解,提炼出了遵循的最佳实践。 1. **变量声明与作用域**: - 遵循单一变量声明...
Y64 是 Base64 编码的一种... 有关更多信息,请参阅 http://en.wikipedia.org/wiki/Base64 和 http://www.yuiblog.com/blog/2010/07/06/in-the-yui-3-gallery-base64-and -y64-encoding/ 大部分代码直接来自 libb64 ...
- **易于集成**:支持多种后端语言(如 Java、PHP 等),并且可以通过适配器与 jQuery、Prototype 和 YUI 等其他 JavaScript 框架无缝集成。 ### 2. Ext的历史和发展 Ext 最初由 Jack Slocum 开发,其设计灵感来源...
这一时期的主要问题是底层组件杂乱无章,且来自YUI2的组件难以维护,加之YUI2逐渐进入了维护阶段,整体前景不明朗。 **2. 第二代类库** - **核心组件**: AraleBase, Utility, WidgetBase, Widget 随着对第一代...
**步骤3:下载 Sencha Tool** - 下载地址:[http://cdn.sencha.com/cmd/6.0.0.202/no-jre/SenchaCmd-6.0.0.202-windows-no_jre.zip]...
* PREPROCESSING SYSTEM CSSPython-SCSSDouban-UICSS3-MIXIN * 库/框架通用功能库jQuerycommon.jscore.css / grid.cssbase.html * 通用组件UI非UI模板组件应用框架移动应用路由管理 * JS模板系统(jQuery Template/...
UI Library(YUI)的扩展而诞生的,但随着其发展和用户群体的增长,从1.1版本开始,EXT已经成为独立的库,并不再依赖YUI。 EXT JS可以与其他JavaScript库如Prototype.js和jQuery协同工作,提供了丰富的组件和API,...
3. 开发时只需要把 resources 包中的 CSS 和图片文件放到 common 下面,还有把 ext-all.js 和 adapter/ext/ext-base.js 放入到 js 中就可以了 ExtJS 的选择器是通过 Ext.Element 来实现的,它是 ExtJS 的核心对象,...
**知识点3:下载Ext** 访问官方下载页面`http://extjs.com/downloads`,选择最新稳定版本或所需特定版本进行下载。本教程使用的是ext-1.1版本,虽然现在可能已经不是最新版本,但其基础原理和结构依然适用于后续...