Я создал плагин jQuery, который работает отлично за исключением способности назвать плагин на различных объектах и каждом объекте, сохраняющем опции, которые это было дано. Проблема состоит в том, что, если я называю плагин на одном объекте, скажите:
$('#myDiv1').myPlugin({
option1: 'some text',
option2: true,
option3: 'another option value'
});
затем назовите плагин снова на другом объекте, скажите:
$('#myDiv2').myPlugin({
option1: 'different text',
option2: false,
option3: 'value for myDiv2'
});
Затем, если я возвращаюсь и пытаюсь сделать что-то с #myDiv1, которому нужны его исходные опции все еще быть неповрежденным, т.е.:
$('#myDiv1').myPlugin.update();
это не будет иметь, это - исходные опции, но они будут переопределены опциями для #myDiv2. Что надлежащий путь состоит в том, чтобы сделать это так, чтобы каждый объект сохранил исходные опции, данные ему? (И вот некоторый пример кода того, что я делаю в плагине),
(function($) {
$.fn.myPlugin = function(options) {
// build main options before element iteration
var opts = $.extend({}, $.fn.myPlugin.defaults, options);
_option1 = opts.option1;
_option2 = opts.option2;
_option3 = opts.option3;
// iterate all matched elements
return this.each(function() {
callPluginFunctions( this, opts );
});
};
....code continued....
Я понимаю, что это - некоторое расползание границ проекта или что-то. Так, как я получаю свои опции остаться присоединенным и остаться в пределах исходного объекта (т.е. #myDiv1), что они были склонны.
Править: В проведении некоторого исследования я вижу, что можно хранить данные к объекту с помощью функции .data jQuery, и в документах говорится, что jQuery UI использует его экстенсивно. Правильный поступок здесь был бы хранилищем опции на объекте с помощью .data, затем, когда ссылается более позднее использование опции, сохраненные в .data???
Перед выполнением любых вызовов, включая импорт моделей, необходимо настроить настройки Django. Что-то вроде этого:
from django.conf import settings
settings.configure(
DATABASE_ENGINE = 'postgresql_psycopg2',
DATABASE_NAME = 'db_name',
DATABASE_USER = 'db_user',
DATABASE_PASSWORD = 'db_pass',
DATABASE_HOST = 'localhost',
DATABASE_PORT = '5432',
TIME_ZONE = 'America/New_York',
)
Еще раз перед запуском обязательно запустите этот код, например:
from your_app.models import *
Затем просто используйте API DB как обычно.
-121--921150-Я нашел абсолютно фантастическую библиотеку http://jung.sourceforge.net , см. javadoc http://jung.sourceforge.net/doc/api/index.html . Это гораздо больше, чем просто графическая реализация. С его помощью можно визуализировать и раскладывать графики; плюс, он имеет множество стандартных алгоритмов графов, которые вы можете использовать из коробки. Иди, проверь! Хотя в итоге я реализовал свой собственный базовый график (раньше я не знал о JUNG), я использую эту библиотеку для визуализации. Выглядит очень аккуратно!
-121--1843381-Сначала, как правило, требуется обработать команду в методе расширения. Во-вторых, вы должны прикреплять конфигурации к каждому предмету...
(function($){
var defaultOptions = { /* default settings here */ };
//called on the native object directly, wrap with $(obj) if needed.
function initializeObject(obj, options) {
//assign the options to the object instance.
$(obj).data('myPlugin-options', $.extend(defaultOptions, options) );
//do other initialization tasks on the individual item here...
}
function updateObject(obj) {
// use $(obj).data('myPlugin-options');
}
function setOption(obj, key, value) {
var d = $(obj).data('myPlugin-options');
d[key] = value;
$(obj).data('myPlugin-options', d);
}
$.fn.myPlugin = function(command, option, val) {
if (typeof command == "object") {
//initialization
return this.each(function(){
initializeObject(this, command);
});
}
if (typeof command == "string") {
// method or argument query
switch (command.toLowerCase()) {
case 'option':
//get value, return the first item's value
if (typeof val == undefined) return this.eq(0).data('myPlugin-options')[option];
//set option value
return this.each(function() {
setOption(this, option, val);
});
case 'update':
return this.each(function() {
updateObject(this);
});
//other commands here.
}
}
}
})(jQuery)
В приведенном выше примере имеется общий шаблон для расширения jQuery. Обычно для использования рекомендуется использовать следующее соглашение.
Initialization:
$(...).myPlugin({ initialization-options-here });
Command:
$(...).myPlugin('command-name'); //where command can be update, etc.
Get Option:
var myValue = $(...).myPlugin('option', 'option-name');
Set Option:
$(...).myPlugin('option', 'option-name', newValue);
Обновлено для использования .data off каждого отдельного объекта.
У меня была такая же проблема, но только пройденные функции были перезаписаны. Прямые свойства были сохранены.
В любом случае, чтобы дополнительно объяснить, что означало ~ ReierierPost, изменяя ваш код для этого должен работать. Вам придется пройти «Opts» повсюду, но я думаю, что это необходимо, чтобы выделить параметры из широкого пространства имен типа плагинов.
$.fn.myPlugin = function(options) {
// iterate all matched elements
return this.each(function() {
// build main options before element iteration
var opts = $.extend({}, $.fn.myPlugin.defaults, options);
callPluginFunctions( this, opts );
});
};
Отредактируйте: Вот код из моего плагина
this.each(function() {
var thisConfig = config;
thisConfig = $.extend(thisConfig,settings);
$.attach($(this),thisConfig);
});
...
$.attach = function($target,config){
, поэтому у меня нет подключаемого «конфигурация» - просто внутри каждой функции.
Ваши параметры широкие плагин. Переместить их внутри каждого (). (Почему вы спрашиваете этот вопрос? Вы в значительной степени разобрали решение самостоятельно.)