| 宇凡's profileBreak the LoopPhotosBlogLists | Help |
|
|
March 20 相当有用的关于Prototype的一些资料March 14 Live.com Gadget机制思考Live.com是基于Atlas框架的一个web2.0应用,其实就Atlas Binding部分,无非是一个封装不错的Ajax框架,甚至提供了跨域数据交换的基础类。因此我觉得通过prototype或者其他开源的js库模仿live.com的机制实现类似的库也是有可能的。首先这是一个最简单的gadget代码:
registerNamespace("mikeo"); // 这里首先注册一个名称空间,类似java的package mikeo
// 接下来是定义一个test类
mikeo.test = function(p_elSource, p_args, p_namespace) {
mikeo.test.initializeBase(this, arguments); var m_version = "1.0";
var m_module = p_args.module; /****************************************
** Public Methods ****************************************/ this.initialize = function(p_objScope) { // initialize方法将在gadget被添加到live.com page的时候调用
mikeo.test.getBaseMethod(this, "initialize", "Web.Bindings.Base").call(this, p_objScope); // 调用父类的初始化方法,感觉这里设计的比较笨拙 //TODO: add your initialization code here
var contentArea = document.createElement("div"); // 创建一个容器层 contentArea.innerText = "Xbox 360 Rulz"; // 设置层的内容 p_elSource.appendChild(contentArea); // 将层添加到父容器,在界面上就是会多一个gadget的显示了,其中有xbox 360 rulz一行字 }; mikeo.test.registerBaseMethod(this, "initialize"); // 不是很明白,难道不能自动化完成?
this.dispose = function(p_blnUnload) { // 释放方法,到用户从page删除该gadget的某个实例时调用,用以释放该gadget占用的资源,这个可是体现程序员风度的地方
mikeo.test.getBaseMethod(this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload); // 同理,调用父类的释放函数 //TODO: add your dispose code here
}; mikeo.test.registerBaseMethod(this, "dispose");
/****************************************
** Private Methods ****************************************/ function SavePrefs() {
if (p_args.onDashboard) { var params = m_module.GetBindingParams();
if (!params) {params = new Object();} //TODO: Add any data that we want to store here
//ex: params.color = "red"; m_module.Serialize();
} } };
mikeo.test.registerClass("mikeo.test", "Web.Bindings.Base");
是不是很简单? 我初步构思的Prototype版本:
var ivan = Namespace.create("Ivan"); // 面向对象的Namespace,目前还只是个hash,将来可以增加一些方法,如inspect赫赫
ivan.Test = Class.create(); // prototype里的Class
ivan.Test.prototype = {
// initialize和dispose方法被调用的时候,会被拦截,动态或者静态的注入一些代码,如调用父类的对应方法
initialize:function(parentElement) {
// TODO your initialize code here
},
dispose:function() {
// TODO your dispose code here
}
}
Object.extend(ivan.Test, Huiye.BaseGadget); // 需要改在这个extend,使他不是直接覆盖父类的同名方法,而是创建一个别名,或者存到一个私有变量内,以便需要的时候被子类调用。
另外发现live.com的gadget是分是否经过审核的,经过审核的gadget直接运行于page中,而没有经过审核的其实是在一个独立的iframe中运行,以免不良代码破坏页面上的其他代码运行。
|
|
|