Параметры JavaScript, поступающие из данных модели представления - PullRequest
2 голосов
/ 30 июля 2010

Я видел / читал много, выступая за «ненавязчивый» JavaScript, содержащийся в отдельных файлах. Я готовлюсь объединить весь мой JavaScript из трех частичных представлений в один файл, на который я буду ссылаться где-то в моем мастере.

Мой вопрос: есть ли какой-либо тип JavaScript, который должен остаться в html? Один пример, который мне кажется, может представлять проблему, был бы что-то вроде:

<script type="text/javascript">
    $(document).ready(function () {
        $('#newQuoteLink').click(function () {
            $('#newQuoteLink').hide();
            $('#newQuoteDiv').load('/Quote/Create/<%:Model.Book.BookID%>');
            return false;
        });
    });
</script>

- в частности

<%:Model.Book.BookID%>

Правильно ли я считаю, что этот скрипт не будет работать, если загружен из отдельного файла?

В основном я хотел проверить, есть ли какие-либо предостережения или другие соображения, прежде чем объединить все в этот отдельный файл.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 30 июля 2010

Нет, обещаем никогда URL-адреса с жестким кодом, которые зависят от маршрута, как вы делали это в своем файле JavaScript.Это плохо, плохо, плохо.Я говорил, что это плохо?

Это слишком много JavaScript в представлении (это трата пропускной способности).Вы можете попробовать объявление глобальной переменной javascript:

<script type="text/javascript">
    var quoteUrl = '<%: Url.Action("create", "quote", new { id = Model.Book.BookID }) %>';
</script>

и в вашем файле javascript:

$(function () {
    $('#newQuoteLink').click(function () {
        $('#newQuoteLink').hide();
        $('#newQuoteDiv').load(quoteUrl);
        return false;
    });
});

Это путь, который я лично не выбрал бы.По-прежнему тег script с объявлением глобальной переменной javascript.Все еще трата.


Вещи становятся еще красивее, как это (и именно в этот момент вы понимаете реальную силу ненавязчивого JavaScript):

<%: Html.ActionLink("Foo Bar Beer Link Text", "create", "quote", 
    new { id = Model.Book.BookID }, new { id = "newQuoteLink" }) %>

и в вашем внешний JavaScript:

$(function () {
    $('#newQuoteLink').click(function () {
        $('#newQuoteLink').hide();
        $('#newQuoteDiv').load(this.href);
        return false;
    });
});
1 голос
/ 30 июля 2010

Да, вы правы в том, что <%:Model.Book.BookID%> не будет виден файлу скрипта.Эти вещи являются частью серверного скрипта, который генерирует HTML, отправляемый в браузер.

Вы можете поместить всю основную часть работы в скрипте в функцию, которая принимает идентификатор в качестве параметра, изатем в вашем html из вашего .ready(..) вызовите такую ​​функцию, как doStuff("<%:Model.Book.BookID%>") и т. д.

Эксперты по JavaScript: другие предостережения? Я обновлю, когда подумаю о

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...