Przechodząc do MVC model danych po stronie klienta maszynopis Kodeksu

głosy
11

Przy użyciu MVC, czasami przechodzą model danych serwera do stronie klienta JavaScript za pomocą Razor wstrzykiwane do JavaScriptu, co następuje:

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

To ustawia zmienną JavaScript o nazwie myClientGuiddo wartości nieruchomości modelu po stronie serwera MyServerGuid. Kiedy dotrze do klienta, kod wygląda mniej więcej tak wewnątrz przeglądarki:

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

Pozwala to zewnętrzne pliki JavaScript aby użyć tej zmiennej.

Moje pytanie brzmi, w maszynopisie, ponieważ cały kod musi odwoływać się poprzez plików zewnętrznych, co jest najlepszym sposobem, aby przejść pól po stronie serwera do maszynopis kodu? Zewnętrzne pliki kod nie może zawierać kod Razor. Należy używać tej samej techniki jak wyżej, w widoku, mieszanie JavaScript i maszynopis w ramach projektu?

Utwórz 09/10/2012 o 19:13
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
17

Kompilator maszynopis po prostu musi wiedzieć, że pola po stronie serwera istnieje. Najprostszym sposobem na to jest użycie deklaracji otoczenia (patrz rozdział 10 z spec). Na przykład, jeśli miał .TS plik potrzebny do korzystania myClientGuid, można zrobić

declare var myClientGuid: string;

w górnej części głównego pliku .TS. Kompilator nie wygeneruje kod dla tej deklaracji var, więc nie będzie nic sprać. Teraz wszystkie pliki, które odwoływać że .TS plik będzie wiedział, że istnieje ciąg myClientGuid dostępny w zakresie globalnym.

Odpowiedział 09/10/2012 o 19:19
źródło użytkownik

głosy
2

Innym rozwiązaniem (w celu uniknięcia zmiennych globalnych) jest zawinąć kodu wynikowego na funkcję, która pobiera potrzebne pól po stronie serwera jak parametry:

W maszynopisie pliku:

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

W .cshtml:

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

Jeśli używasz RequireJS, można również eksportować setupMyPagefunkcję jako moduł, aby uniknąć dodawania funkcji do globalnej przestrzeni nazw:

W maszynopisie pliku:

export = setupMyPage;

W .cshtml:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
Odpowiedział 08/08/2014 o 12:24
źródło użytkownik

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