Περνώντας MVC μοντέλο δεδομένων για client-side κώδικα γραφομηχανή

ψήφοι
11

Όταν χρησιμοποιείτε MVC, μερικές φορές περνούν δεδομένων μοντέλο του διακομιστή στον πελάτη-side το JavaScript χρησιμοποιώντας Razor εγχέεται στο JavaScript, ως εξής:

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

Αυτό ορίζει μια μεταβλητή Javascript για το όνομα myClientGuidμε την αξία του ακινήτου server-side μοντέλο MyServerGuid. Όταν φτάσει στον πελάτη, ο κωδικός μοιάζει με το εσωτερικό του προγράμματος περιήγησης:

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

Αυτό επιτρέπει εξωτερικά αρχεία JavaScript για να χρησιμοποιήσετε αυτήν τη μεταβλητή.

Η ερώτησή μου είναι, στη γραφομηχανή, δεδομένου ότι όλα κωδικός πρέπει να αναφέρεται με εξωτερικά αρχεία, ποιος είναι ο καλύτερος τρόπος για να περάσει στην πλευρά του διακομιστή πεδία με γραφομηχανή κωδικό; Εξωτερικά αρχεία κώδικα δεν μπορεί να περιέχει κώδικα ξυράφι. Θα πρέπει να χρησιμοποιήσω την ίδια τεχνική όπως παραπάνω, με την προβολή, την ανάμιξη JavaScript και γραφομηχανή στο πλαίσιο του έργου;

Δημοσιεύθηκε 09/10/2012 στις 19:13
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
17

Ο compiler γραφομηχανή απλά πρέπει να γνωρίζουμε ότι υπάρχουν server-side πεδία σας. Ο ευκολότερος τρόπος για να γίνει αυτό είναι να χρησιμοποιεί δηλώσεις περιβάλλοντος (βλέπε τμήμα 10 του spec). Για παράδειγμα, αν είχατε ένα .ts αρχείο που απαιτούνται για τη χρήση myClientGuid, θα μπορούσατε να κάνετε

declare var myClientGuid: string;

στην κορυφή του κύριου αρχείου .ts σας. Ο compiler δεν θα δημιουργήσει κώδικας για τη δήλωση αυτή var, έτσι δεν θα κοπανάω τίποτα. Τώρα όλα τα αρχεία ότι η αναφορά ότι το αρχείο .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λειτουργούν ως μια ενότητα, για να αποφύγετε την προσθήκη της λειτουργίας για την παγκόσμια namespace:

Στη γραφομηχανή αρχείο:

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