Как передать параметры в указанный файл javascript из бритвы - PullRequest
6 голосов
/ 21 августа 2011

Если у меня есть такие javascript в моей бритве:

@{
    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;
    }

Итак, я хочу поместить этот javascript в отдельный файл и ссылаться на этот файл в моем представлении, и проблема в том, как я могу передать значения из бритвы в javascript, когда javascript находится в отдельном файле?

Ответы [ 2 ]

7 голосов
/ 21 августа 2011

Javascript - это файлы, которые не анализируются компилятором, поэтому у вас нет шансов ...

Однако вы можете использовать динамический JavaScript, например:

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

Есть маршрут, который говорит:

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

Создайте свой контроллер и используйте простой return View(); как

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

    // pass any Model you want

    return View();
}

В этом представлении, просто поместите вашJavaScript с Razor синтаксис .


Или вы можете использовать переменные и загружать их, используя RenderSection()

в вашем _Layout.cshtml файле добавитьраздел в вашем <head> перед любым другим 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>

и в любом View, в который вы хотите добавить такие переменные, просто выполните:

@Section script_variables {

    <script type="text/javascript">

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

    </script>

}

и все другие файлы, которыеВы загружаете скрипт, будет иметь такой код ...

1 голос
/ 21 августа 2011

Вы можете объявить некоторые js-переменные на своей странице и затем использовать эти переменные из .js-файла

Вы можете вызвать функцию внутри вашего .js-файла и отправить свои данные в качестве аргументов

(рассмотрите возможность создания одного объекта и заполнения вашими данными вместо создания нескольких переменных.)

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