2010-11-13 5 views
3


Я использую модальные диалоги jQuery в своем приложении для обработки обычных операций CRUD. В некоторых случаях у меня есть даже два сложенных модальных диалога.jQuery generic code

Затем я создал две общие функции во внешнем файле javascript для обработки соответственно показа и представления форм CRUD.

Чтобы показать модальные диалоговые я называю следующую функцию

Эта функция получения, среди других, параметр level что проинструктировать функцию том, как складывать диалог и где разместить обработанную Частичное разметку возвращающегося обратно от вызова ajax. Эта функция работает нормально.

Внутри частичного вид возвращаемого АЯКСА вызова есть вход и в конце следующего код

<div style="text-align:right;"> 
    <input type="submit" id="btnSave" value="Salva" /> 
</div> 

и для части JQuery, например,

$("#contactForm").submit(function(event) { 
    _submitForm(1, event, "#contactForm", "post", "html", '<%= Url.Content("~/Contact/Save") %>'); 
}); 

Как вы можете см. функцию отправки, имеет следующую подпись:

function _submitForm(level, event, formName, atype, adataType, aurl) { 
} 

и его ручка

  • представление формы для правильного действия контроллера
  • обратной связи с пользователями (например, «Действие выполнено успешно»)
  • диалогового окна операция закрытия

Параметр уровня необходим для решения всех функций, в том числе и закрытия диалогового окна, для правильной панели DIV используется.

Я хотел бы иметь возможность показывать один и тот же диалог иногда как диалог, а иногда и как вспомогательный диалог.
Чтобы быть в состоянии сделать это, я имею в виду «говоря логически», как я не так силен яваскриптом и JQuery, мне нужно следующие изменения:

  • Измените функцию _loadDialog, чтобы сохранить параметр level в диалоге сама пометка
  • Измените функцию _submitForm и произведите ее, используя правильный параметр level, который ранее был сохранен с помощью функции _loadDialog.

Как я могу это достичь?

+0

Какова связь между этими двумя функциями? Вызывается ли '_submitForm' из' onCloseHandler', который вы передаете в '_loadDialog'? – VoteyDisciple

+0

@VoteyDisciple: Нет. '_submitForm' вызывается событием click кнопки отправки в форме – Lorenzo

ответ

1

Я немного смущен тем, что есть где и когда, но кажется, что вы хотите связать немного информации с определенным элементом.

Для этого вы можете использовать метод jQuery .data(). Он будет связывать любые данные, которые вы хотите, с определенным элементом.

Не уверен, как именно она должна быть использована в вашей ситуации, но вот общий пример:

$('#someSelector').data('level', 3); 

Теперь элемент с идентификатором someSelector будет иметь номер 3 отображается в атрибуте 'level' в связанных с ними данных ,

Так, чтобы получить его, вы могли бы сделать это:

$('#someSelector').data('level'); // returns 3 

При уничтожении элемент, который имеет данные, связанные с ним (это только один из примеров таких данных), вы должны быть уверены, чтобы использовать .remove() или .empty() или один из других методов, который автоматически или вручную удаляет данные.

+0

Ok. В основном я пытаюсь использовать всегда ту же функцию 'loadDialog' и' submitForm' либо из своих представлений, либо из моего частичного из любого уровня сложного диалога. Поэтому мне нужно убедиться, что при вызове 'submitForm' из частичного или представления он закроет правильный диалог. – Lorenzo

1

Похоже, что все, что вам нужно, это передать параметр level, который вы уже получили в функции _submitForm при вызове.

function _loadDialog(level, action, id, title, onCloseHandler) { 
    var form = $('<form ...></form>'); 
    // ... Generates the form markup 

    form.submit(function() { 
     _submitForm(level, ...); 
    }); 
} 

В то время как я, очевидно, пропустил все детали я не знаю вашей реализации, ключ просто, что все level получает передается в _loadDialog позже получить прошло в _submitForm, когда это называется.

В JavaScript не имеет значения, что _submitForm не вызывается одновременно с вызовом _loadDialog. Благодаря тому, что называется «закрытием» (о чем любят говорить программисты JavaScript), переменная level безопасно сохраняется в вашей анонимной функции обратного вызова для form.submit() и по-прежнему будет доступна с тем же значением, когда эта функция в конечном итоге будет вызвана.

+0

Ok. Я действительно понимаю ваше предложение, и его очень легко реализовать. В любом случае я не уверен, что это будет работать в моей реализации, потому что это не так просто, как переменная формы, которую вы используете. Я собираюсь изменить свой вопрос, чтобы добавить более подробную информацию о двух функциях, чтобы лучше понять детали. Было бы здорово, если бы вы могли взглянуть на него. Спасибо! – Lorenzo

+0

Было бы проще, если бы во время создания диалога я мог добавить невидимый раздел к разметке диалога, который может запросить код внутри частичного запроса. В этом разделе я мог бы установить значение уровня – Lorenzo