2013-07-03 2 views
0

Я разрабатываю серверный пользовательский элемент управления (.NET), «DatePicker» с плагином jQueryUI. Итак, у меня есть следующий скрипт, который загружается как webResource:Пользовательские элементы управления и веб-ресурсы (скрипты)

JavaScript

$(function() { 
    $("#" + ctrlInput).datepicker({ 
     maxDate: MaxDate, 
     minDate: MinDate 
    }); 
}); 

Как вы можете видеть, у меня есть JavaScript переменные, поэтому для загрузки сценария и переменные, я сделать следующее:

C#

 string javascriptVariables = String.Format(
      "var MinDate = '{0}'; var MaxDate = '{1}'; var ctrlInput = '{2}';", 
      MinDate ?? DateTime.MinValue.ToShortDateString(), 
      MaxDate ?? DateTime.MaxValue.ToShortDateString(), 
      _textBox.ClientID 
     ); 

     // Load javascript variables (it will be load every time i add a control) 
     Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "dateValues" + _textBox.ClientID, javascriptVariables, true); 

     // Load jQueryPlugin (it is loaded only once, and this is the problem) 
     Page.ClientScript.RegisterClientScriptResource(this.GetType(), "[[resourceName]]"); 

Работает нормально. Проблема заключается в том, что я добавляю этот элемент управления на страницу более одного раза.

И это потому, что переменные сценария загружаются отлично, но RegisterClientScriptResource не загружает плагин jQuery снова! И я не знаю, как я могу заставить нагрузку! Поскольку я не могу установить ключ ресурса на RegisterClientScriptResource

Кто-нибудь знает, как это решить?

Thanks

+1

Зачем вам нужно, чтобы плагин jQuery загружался несколько раз? Мне кажется, что вы хотите загрузить его один раз, чтобы вы могли вызывать методы несколько раз, но не обязательно иметь несколько копий методов там снова и снова. –

ответ

0

Я не думаю, что вы принимаете проблему правильно.

  • Использование глобальных переменных (в JS), особенно, когда они на самом деле используются только локально очень плохая идея. source
  • Загрузка jQuery или плагина jQuery более одного раза также может быть источником ошибок. source

Что бы я сделал, это подумать о другом способе передачи переменных в ваш javascript, что-то вроде атрибутов данных.

Вы, вероятно, вход HTML, производимую с управлением от сервера, добавить данные атрибуты для вашей даты:

<input type="text" ... data-mindate="01/01/2013" data-maxdate="12/31/2013" /> 

Следующий шаг, вместо того, чтобы кормить глобальные переменные в функции Datepicker, использовать данные атрибуты:

$('#whatever').data('mindate'); 

или

$('#whatever').attr('data-mindate'); 

и быстрый демо : http://jsfiddle.net/JjemN/

Смежные вопросы