2011-08-21 12 views
5

Jeśli mam taką javascript w moim brzytwa veiw:Jak przekazać parametry do odwołania javascript pliku z maszynki widzenia

@{ 
    Grid grid = @Model.GetGridFromModel(); 

    Bool isSomething = @Model.GetSomething(); 

    Bool isSomethingMore = @Model.GetSomehtingMore(); 

    Bool isSomethingElse = @Model.GetSomethingElse() 

    int caseCount = 0; 
} 



$(document).ready(function() {  
    $("#tabs").tabs({ 
     show: function (event, ui) {   
      switch (ui.index) { 
      @if (isSomething){ 
      <text> 
       case @caseCount:      

        change('@grid.Avalue'); 

        break; 
      </text> 
       caseCount++; 
       } 

      @if(isSomethingElse){ 
      <text> 
       case @caseCount: 

        change('@grid.Bvalue'); 
        break; 
      </text> 
       caseCount++; 
       } 

      @if (isSomethingElseMore){ 
      <text> 
       case @caseCount: 
        change('@grid.Cvalue'); 
        break; 
       </text>     
       } 
      } 
     } 
    }); 

    funciton change(id) 
    { 
    //doing somehting; 
    } 

więc chcę umieścić ten skrypt w oddzielnym pliku i odsyłającego wynika, że ​​plik z moim zdaniem, i problemem jest to, w jaki sposób mogę przekazać wartości z brzytwy do javascript, gdy javascript w osobnym pliku?

Odpowiedz

7

JavaScript są pliki bez przetwarzane przez kompilator, więc nie masz szans ...

Co można zrobić, jednak jest użycie dynamicznej javascript, na przykład:

<script src="/CustomScripts/scripts.js"><script> 

Mają trasę, która mówi:

routes.MapRoute(
    "CustomScripts", "CustomScripts/{id}", 
    new { controller = "Scripts", action = "GetFile" } 
); 

Stwórz swój kontroler i użyć prosty return View(); jak

public ActionResult GetFile(string id) 
{ 
    // use id as you please 

    // pass any Model you want 

    return View(); 
} 

W tym widoku, po prostu wstaw javascript z Razor składnia.


Albo można użyć zmiennych i załadować je uczynić stosowanie RenderSection()

w pliku _Layout.cshtml dodać sekcję w swojej <head> przed każdym innym javascript

<head> 
    <meta charset="utf-8" /> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 

    @RenderSection("script_variables", false) 

    <script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/modernizr-2.0.6-development-only.js")" type="text/javascript"></script>  
</head> 

iw żadnej View że chcesz dodać takie zmienne, po prostu wykonaj:

@Section script_variables { 

    <script type="text/javascript"> 

     var variableA = '@MyVarA', 
      variableB = '@MyVarB', 
      variableC = '@MyVarC'; 

    </script> 

} 

Wszystkie inne pliki ładowane do skryptu będą miały taki kod ...

1

może zadeklarować kilka zmiennych JS na stronie, a następnie wykorzystać te zmienne z .js akt

Można wywołać funkcję wewnątrz .js pliku i wysłać swoje dane jako argumenty

(Proszę zwrócić uwagę, tworząc jeden obiekt i wypełnić swoimi danymi zamiast tworzenia wielu zmiennych.)

+0

Czy możesz podać nieco więcej szczegółów? – Joper

Powiązane problemy