Какие методы javascript/jquery вы обычно кодируете на своих сайтах?
Я кодирую основной объект 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...
}
msg - это метод для имитации С# String.Format, include позволяет асинхронно вытягивать скрипты. Есть и другие ( formatDate: преобразует строку datetime в локальное время пользователя, getBrowser: получает типы браузеров на основе обнаружения функций, открывать: открывает ссылку в новом окне и т.д.)
Этот основной объект позволяет мне выполнять широкий спектр задач... просто называя Core.method... перемещая почти весь мой javascript-код в файл .js, который можно кэшировать.
Просто из любопытства, какие общие функции вы строите на своих сайтах?
Ответы
Ответ 1
Я обычно добавляю обертку для поиска любых страниц ошибок.
ajaxErrorHandle: function (data, container) {
if (data.indexOf("Server Error in '/' Application") != -1) {
container.html(data);
$('.ajax-loader').hide();
return false;
}
return true;
}
Ответ 2
Функция регистрации является одной из первых вещей, которые я добавляю, если я не могу начать с Paul Irish templateplate.
// 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) );
}
};
Ответ 3
Я использую некоторые функции форматирования строк, похожие на другие языки. Использование:
var s = 'Hello {0}!'.format('World'); // result is "Hello World!"
var person = { Name: 'Will' };
var greeting = 'Hello {Name}!'.formatWith(person); // result is "Hello Will!";
И вот определения функций. Я также использую простые версии карт и уменьшаю их повсюду, а не на внешних сайтах, но в интрасети я изо всех сил использую 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]);
}
Ответ 4
Я использую некоторые методы удобства, обрабатываю динамическую тематику, получаю информацию о клиенте для сообщений об ошибках и обрабатываю проблемы с использованием .NET Postbacks в моем ядре. Вот несколько фрагментов...
/**
* 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
Ответ 5
У меня был отличный для кросс-домена 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;
};
Я делаю это по памяти того, что я написал однажды, но вы получаете точку