你如何在真实网站中实现jquery oop

时间:2009-09-05 01:18:17

标签: jquery oop

这是我的实施,想知道是否有任何改进,或分享你的想法。

//* global variable *//
//I put all the variable into $('body');
$base_url = $('body').data('base_url');
$logged_in = $('body').data('logged_in');
//...

//* Object. like namespace *//
lzyy = {};

//* constructor *//
//correspond with mvc's c(controller)
lzyy.tag = function()
{
    //new Class
    m_ftl = new fav_tag_list('#fav_tag_list');
    m_fti = new fav_tag_input('#fav_tag_input');
    m_note = new note('#note');
};

//* method *//
//correspond with mvc's m(method)
lzyy.tag.property.add = function()
{
    //* events bind *//
    $('#fav_tag_btn').bind('click',function(e){
        m_ftl.add_tag(m_fti.get_val());
        m_fti.clear();
    });
}

//* util functions *//
lzyy.preload_imgs = function()
{
    for(var i = 0; i<arguments.length; i++)
    {
        jQuery("<img>").attr("src", arguments[i]);
    }
};
lzyy.br2nl = function(str)
{
    return str.replace(/<br\s*\/?>/mg,"\n");
};
//...

//* init *//
$(function()
{
    //do something that can affect all pages
});

//* objects *//
//need another code snippet provided below
var Base_Class = Class.extend({
    init:function(selecotr)
    {
        if(!this.self)
        this.self = $(selecotr);
    }
});
//for example,we have an dom element id = note 
//we can add method , property
var note = Base_Class.extend({
    close:function()
    {
        this.self.slideUp('fast');
    }
});
//we can override parent method
var tag_input = Base_Class.extend({
    init:function(selecotr)
    {
        this._super(selecotr);
        if(this.self.length)
        {
            //do something...
        }
    },
    append_item:function(data)
    {
        this.self.append(data);
    }
});
//...

2 个答案:

答案 0 :(得分:3)

即使这可能不符合您的问题/改进建议请求的“答案”,但我必须质疑您的目标:
为什么在编写java 脚本时使用OOP?该语言不是为它设计的(顺便说一下,jQuery框架也没有),我认为根本没有任何收获性能和可维护性。我唯一看到的是,需要更多的代码来获得相同的结果,并且为了所有实际目的而执行不相关的编程范例。

答案 1 :(得分:1)

我倾向于将我的网站分成多个对象,而这些对象中的大多数都是单例(也就是说,它们没有构造函数)。这是因为,您每个站点真正需要多个对象的频率是多少?有时,但不经常。

我通常拥有的对象是GUI,它负责处理gui,Backend,它具有向服务器发出请求的标准化功能,处理响应JSON的方法,以及处理错误(包括服务器的错误)传递下来,通常显示在模态弹出窗口中),以及一个控制对象,它处理页面的工作方式。每个对象都在自己的文件中定义。

以下是具有构造函数(不是单例)的对象的示例:

function ClassName(arg1, arg2){
    var that = this;
    /****Private Variables****/
    var a = 0;
    var b = 1;
    /****Public Variables****/
    this.c = 2;
    this.d = 3;
    /****Private Functions****/
    var e = function(arg1, arg2){

    }
    var f = function(arg1, arg2){

    }
    /****Protected Functions****/
    this.g = function(arg1, arg2){

    }
    this.h = function(arg1, arg2){

    }
    /****Constructor code ****/
    alert("constructed");
}
/*****Public Functions*****/
ClassName.prototype.i = function(arg1, arg2){

}
ClassName.prototype.j = function(arg1, arg2){

}

以下是单身人士的一个例子:

var ObjectName = {};
/****Public Variables****/
ObjectName.a = 0;
ObjectName.b = 1;
/****Public Functions****/
ObjectName.c = function(arg1, arg2){

}
ObectName.d = function(arg1, arg2){

}