您通常在站点中编写哪些类型的javascript/jquery方法?

您通常在站点中编写哪些类型的javascript/jquery方法?,jquery,core,javascript-framework,Jquery,Core,Javascript Framework,我正在为我的站点编写一个核心javascript对象,构建我使用的常用方法(并包装一些jQuery方法) 它是这样建造的: var Core = { baseUrl: '/', lang: 'en-us', loggedIn: false, msg: function(str) { for (var i = 1, len = arguments.length; i < len; ++i) { str = str.replace("{" + (i - 1

我正在为我的站点编写一个核心javascript对象,构建我使用的常用方法(并包装一些jQuery方法)

它是这样建造的:

var Core = {
  baseUrl: '/',
  lang: 'en-us',
  loggedIn: false,

  msg: function(str) {
    for (var i = 1, len = arguments.length; i < len; ++i) {
      str = str.replace("{" + (i - 1) + "}");
    }
    return str;
  },
  include: function(url, success, cache) {
    $.ajax({
      url: url,
      dataType: 'script',
      success: success,
      cache: cache !== false
    });
  },
  etc...
}
var核心={
baseUrl:“/”,
朗:“恩,我们”,
洛格丁:错,
msg:函数(str){
for(变量i=1,len=arguments.length;i
msg是一种模拟C#String.Format的方法,include允许我异步拉入脚本。还有其他(formatDate:将日期时间字符串转换为用户的本地时间,getBrowser:根据功能检测获取浏览器类型,打开:在新窗口中打开链接等。)

这个核心对象让我可以执行各种各样的任务。。。通过调用Core.method。。。将我几乎所有的javascript代码移动到一个可以缓存的.js文件中


出于好奇,您在站点中构建了哪些常见功能?

我有一个很棒的跨域ajax功能,带有一个很棒的包装器,不幸的是,在恢复HD之前,我暂时丢失了它。但情况是这样的:

ajax = function(site, callback) {
    $.getScript('get.php?url=' + escape(site) + '&callback=' + callback);
}

ajax.find = function(url) {
    ret = [];
    if (url.match) {
        for (var i = 0; i < this.length; i++)
            if (url.match(this[i].url))
                ret.push(this[i]);
    }
    else
        for (var i = 0; i < this.length; i++)
            if (url === this[i].url)
                ret = this[i];
    return ret;
};
ajax=function(站点,回调){
$.getScript('get.php?url='+escape(site)+'&callback='+callback);
}
ajax.find=函数(url){
ret=[];
if(url.match){
for(var i=0;i

我是通过记忆很久以前写过的东西来实现这一点的,但是你明白了,我通常会添加一个包装器来捕获任何错误页面

ajaxErrorHandle: function (data, container) {
        if (data.indexOf("Server Error in '/' Application") != -1) {
            container.html(data);
            $('.ajax-loader').hide();
            return false;
        }
        return true;
    }

我使用了一些字符串格式化函数,这些函数与其他语言类似。用法:

var s = 'Hello {0}!'.format('World'); // result is "Hello World!"
var person = { Name: 'Will' };
var greeting = 'Hello {Name}!'.formatWith(person); // result is "Hello Will!";
下面是函数定义。我还到处使用map和reduce的简单版本,在外部站点上没有这么多,但在内部网上我完全使用Javascript

String.prototype.format = function ()
{
    var pattern = /\{\d+\}/g;
    var args = arguments;
    return this.replace(pattern, function (capture) { return args[capture.match(/\d+/)]; });
}

String.prototype.formatWith = function (obj, clean)
{
    return this.replace(/\{(.*?)\}/gim, function (all, match) { return obj[match]; });
}

function reduce(fn, a, init, limit)
{
    var s = init;
    var l = (limit == undefined) ? a.length : Math.min(a.length, limit);
    for (i = 0; i < l; i++)
        s = fn(s, a[i], i);
    return s;
}

function map(fn, a)
{
    var l = a.length;
    for (i = 0; i < l; i++)
        a[i] = fn(a[i]);
}
String.prototype.format=函数()
{
变量模式=/\{\d+\}/g;
var args=参数;
返回this.replace(模式、函数(捕获){返回args[capture.match(/\d+/)];});
}
String.prototype.formatWith=函数(obj,clean)
{
返回this.replace(/\{(.*?\}/gim,函数(all,match){return obj[match];});
}
函数reduce(fn,a,init,limit)
{
var s=init;
变量l=(限制==未定义)?a.length:Math.min(a.length,limit);
对于(i=0;i
我使用了一些方便的方法,处理动态主题,获取用于错误报告的客户端信息,并在我的核心中使用.NET回发处理主题问题。这里有几个片段

    /**
    *   A convenience method for notifications that can be 
    *   called anywhere in the app, in place of standard 
    *   javascript alerts.  Assuming you define CSS for 
    *   the ID and/or are using jQuery UI, these alerts 
    *   are skinned.
    *
    *   @param string - the message that you want to display
    *   @example - alert('Hello World');
    */
    alert: function(msg) {
        $('body').append('<div id="alert">' + msg + '</div>');
        $('#alert').dialog({
            bgiframe: true
            , modal: true
            , width: 400
            , buttons: {
                Ok: function() { $(this).dialog('destroy'); }
            }
        });
        return this;
    } // EO alert


    /**
    *   .NET Event Handlers
    *   When new code is added on to the client by way of
    *   .NET PostBacks, CSS is typically ignored.  This method
    *   can be used to add CSS to new elements as they are added
    *   asynchronously.  It calls a script at the end of every 
    *   partial post back request.
    *
    *   @example - Core.NETEventHandlers.AsyncPostBack.Init();
    */
    , NETEventHandlers: {
        /**
        *   Async Post Back Handler
        *   calls a script at the end of every partial post back request
        */          
        AsyncPostBack: {
            EndRequest: {
                Add: function() {
                    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(Core.NETEventHandlers.AsyncPostBack.EndRequest.Handler); // where Core.NET... leads to this method
                } // EO Add
                , Handler: function(sender, args) {
                    // Handlers here.  Consider adding them into a separate method
                    alert('Hello World');
                } // EO Handler
            } // EO endRequest
            , Init: function() {
                Sys.Application.add_init(Core.NETEventHandlers.AsyncPostBack.EndRequest.Add);   // where Core.NET... leads to this method
            }
        } // EO AsyncPostBack
    } // EO dotNETEventHandlers
/**
*一种方便的通知方法,可以
*在应用程序中的任意位置调用,以代替标准
*javascript警报。假设您为
*ID和/或正在使用jQuery UI,这些警报
*你被剥皮了。
*
*@param string-要显示的消息
*@example-alert('Hello World');
*/
警报:功能(msg){
$('body')。追加(''+msg+'');
$(“#警报”)。对话框({
bgiframe:对
,模态:真的
,宽:400
,按钮:{
确定:函数(){$(this).dialog('destroy');}
}
});
归还这个;
}//EO警报
/**
*.NET事件处理程序
*通过以下方式将新代码添加到客户端时:
*NET回发,CSS通常被忽略。这种方法
*可以用于在添加新元素时将CSS添加到新元素中
*异步的。它会在每个脚本的末尾调用脚本
*部分回邮请求。
*
*@example-Core.NETEventHandlers.AsyncPostBack.Init();
*/
,NETEventHandlers:{
/**
*异步回发处理程序
*在每个部分回发请求结束时调用脚本
*/          
异步回发:{
结束请求:{
添加:函数(){
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(Core.NETEventHandlers.AsyncPostBack.endRequest.Handler);//其中Core.NET…导致此方法
}//EO添加
,处理程序:函数(发送方,参数){
//处理程序。考虑将它们添加到单独的方法中。
警报(“你好世界”);
}//EO处理器
}//EO结束请求
,Init:function(){
Sys.Application.add_init(Core.NETEventHandlers.AsyncPostBack.EndRequest.add);//其中Core.NET…导致此方法
}
}//EO异步回发
}//EO dotNETEventHandlers

如果我不能从日志开始,那么日志功能是我添加的第一项功能之一


这是什么意思?如何将文章发布到维基?现在只有mods可以将文章设置为维基。我已将其标记为mod注意。它更适合程序员。SE,现在它可用于此类对话。很好,我将添加到那里。@Will,我将问题发布给程序员SE,他们关闭了它。:DCool,因此,不是返回包含成功标志的JSON对象,而是检查返回数据字符串以查看它是否以错误消息开头?这是个不错的主意,在那些时候,你只想返回一小块HTML而不是JSON。在现代浏览器中,你可能想使用默认的map和reduce方法。检查,很好,我有一个函数
// usage: log('inside coolFunc',this,arguments);
// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function(){
  log.history = log.history || [];   // store logs to an array for reference
  log.history.push(arguments);
  if(this.console){
    console.log( Array.prototype.slice.call(arguments) );
  }
};