2010-09-07 3 views
1

Я видел много вопросов, поднятых вокруг PartialViews и Javascript: проблема в PartialView, которая требует Javascript, например. вид, что оказывает jqGrid:Пользовательский механизм просмотра для решения проблемы Javascript/PartialView?

Парциальное Просмотр нужна <div id="myGrid"></div> , а затем некоторый скрипт:

<script> 
$(document).ready(function(){ 
    $('#myGrid').jqGrid({ // config params go here 
    }); 
} 
</script> 

Вопрос заключается в том, чтобы включить PartialView без засоряя страницу с инлайн тегами и несколькими $ (документ) .ready tags.

Мы также хотели бы объединить результаты нескольких вызовов RenderPartial в один документ. Обратный вызов().

И, наконец, у нас есть проблема с файлами библиотеки Javascript, такими как JQuery и JQGrid.js, которые в идеале должны быть включены в нижней части страницы (прямо перед блоком $ .ready) и в идеале включаться только тогда, когда соответствующие PartialViews используются на странице.

При очистке WWW не кажется, что кто-то решил эту проблему. Потенциальным способом может быть реализация пользовательского механизма просмотра. Мне было интересно, есть ли у кого-нибудь альтернативные предложения, которые я, возможно, пропустил?

+1

В чем проблема, связанная с текущей реализацией? Вы видите увеличение производительности при группировке вызовов на .jqGrid() в одной функции $ (document) .ready() в нижней части страницы? – jessegavin

+0

Не будет заметного увеличения производительности, пока вы не начнете иметь сотни этих вызовов на странице. Прежде чем вы дойдете до этого момента, вы уменьшите его до одного вызова jQuery, ориентированного на все элементы с помощью селектора классов и параметризованной функции для выполнения pogery jiggery. –

+0

"повторение страницы с помощью встроенных тегов и нескольких" Jeesh. Я не думаю, что вы делаете своих клиентов и пользователей счастливее, заботясь об этом. – jfar

ответ

2

Это хороший вопрос, и это то, с чем моя команда боролась, когда был выпущен JQuery. Один из коллег написал базовый класс страницы, который объединил все готовые документы в один, но это была полная трата времени и деньги нашего клиента.

Нет необходимости комбинировать вызовы $ (document) .ready() в одном, поскольку они все будут вызваны, один за другим в том порядке, в котором они отображаются на странице. это связано с многоликой делегатской природой метода, и это не окажет существенного влияния на производительность. Вы можете найти свою страницу немного более ремонтопригодной, но ремонтопригодность редко возникает с jQuery, поскольку она имеет такой краткий синтаксис.

Не могли бы вы рассказать о причинах их объединения? Я нахожу, что многие разработчики являются перфекционистами и хотят, чтобы их разметка была абсолютно идеальной. Скорее, я считаю, что, когда он достаточно хорош для клиента, когда он работает адекватно и правильно отображает, мое время лучше потрачено на выполнение следующего требования. Я потратил много времени на форматирование HTML, о котором никто никогда не будет смотреть.

Любой скрипт, который вы хотите отобразить в нижней части страницы, должен идти внутри метода ClientScriptManager.RegisterStartupScript, поскольку он отображается внизу страницы.

http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx

Редактировать Просто заметил, что ваш вопрос конкретно для ASP.NET MVC. Мой ответ - скорее ответ ASP.NET, но с точки зрения рендеринга html, большинство моих комментариев по-прежнему актуальны. Несколько функций document.ready не являются проблемой.

Стандартный подход jQuery - это написать один скрипт, который добавит поведение к нескольким элементам.Таким образом, добавить класс дивы, которые вы хотите содержать сетку и вызвать функцию на каждых из них:

<script language="text/javascript"> 
    $(document).ready(function(){ 
     $('.myGridClass').each(function(){ 
       $(this).jqGrid({ 
        // config params can be determined from 
        //attributes added to the div element 
        var url = $(this).attr("data-url"); 

       }); 
      }); 
    } 
</script> 

Вам нужно только добавить этот скрипт один раз на странице и в вашем частичном виде вы просто:

<div class="myGridClass" data-url="http://whatever-url-to-be-used"></div> 

Обратите внимание на атрибут url. Это синтаксис HTML5, который не сможет проверить HTML 4. Он по-прежнему будет работать в браузерах HTML 4. Это имеет значение только в том случае, если вам нужно запускать страницы через html-валидаторы. И я могу видеть вас already know about HTML5

+0

Спасибо за ответ. Мне нравится ваше представление о пользовательских атрибутах div. Основная проблема с вашим ответом заключается в том, что PartialView не является самодостаточным. Он будет иметь некоторую разметку, но эта разметка зависит от другого сценария в другом месте за пределами представления. –

+0

Правда, но любой подход, который объединяет готовые к документу функции в один, также требует внешних зависимостей, чтобы отслеживать и комбинировать сценарии. Я предполагаю, что на вашей странице не будет очень много сеток, и одного сценария для каждого будет достаточно, но не идеально. Если у вас была страница со многими элементами управления, тогда был бы хороший аргумент для одного скрипта. Как и во многих вещах, нет простого и легкого ответа. Будет компромисс между самоограничением и удобочитаемостью разметки. Что касается производительности, вам придется выполнить свои собственные тесты. –

0

Не очень, но в отношении вашего последнего пункта вы не можете отправить соответствующие теги в качестве словаря ViewData в действие, которое возвращает частичное?

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