Передача MVC модели данных на стороне клиента машинопись кодекса

голоса
11

При использовании MVC, я иногда передать данные модели сервера к клиентской стороне JavaScript, используя бритву впрыскивается в JavaScript следующим образом:

<script type=text/javascript>
    var myClientGuid = '@Model.MyServerGuid';
</script>

Это устанавливает переменную JavaScript с именем myClientGuidк значению свойства на стороне сервера модели MyServerGuid. Когда он достигает клиента, код выглядит примерно так внутри браузера:

<script type=text/javascript>
    var myClientGuid = 'EF0077AB-0482-4D91-90A7-75285F01CA6F';
</script>

Это позволяет внешние файлы JavaScript, чтобы использовать эту переменную.

Мой вопрос заключается в машинописном, так как весь код должен ссылаться с помощью внешних файлов, что это лучший способ передать на сторону сервера полой машинописи кода? Внешние файлы кода не могут содержать Razor кода. Должен ли я использовать ту же технику, что и выше, в представлении, смешиваясь JavaScript и машинопись в рамках проекта?

Задан 09/10/2012 в 19:13
источник пользователем
На других языках...                            


2 ответов

голоса
17

Машинописи компилятор просто нужно знать, что существуют серверные поля. Самый простой способ сделать это состоит в использовании окружающей среды декларации (см раздел 10 спецификации). Например, если у вас есть ts-файл, необходимый для использования myClientGuid, вы могли бы сделать

declare var myClientGuid: string;

в верхней части главного .ts файла. Компилятор не будет генерировать код для этой вар декларации, так что вы ничего не будете затирать. Теперь все файлы, ссылки на которые .TS файл будет знать, что есть myClientGuid строка доступна в глобальном масштабе.

Ответил 09/10/2012 в 19:19
источник пользователем

голоса
2

Другое решение (чтобы избежать глобальных переменных), чтобы обернуть код машинописи в функции, которая принимает необходимые серверные поля в качестве параметров:

В машинописном файле:

function setupMyPage(myGuid:string) {
   ...
}

В .cshtml:

<script src='@Url.Content("<path-to-typescript>")'></script>
<script>
    setupMyPage('@Model.MyServerGuid');
</script>

Если вы используете RequireJS, вы можете также экспортировать setupMyPageфункцию в качестве модуля, чтобы избежать добавления функции в глобальное пространство имен:

В машинописном файле:

export = setupMyPage;

В .cshtml:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
Ответил 08/08/2014 в 12:24
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more