2016-06-14 7 views
0

У меня есть сетка Кендо, свойство Events которой привязано к функции (Grid_OnRowSelect) в внешнем файле javascript. В внешнем файле javascript есть другие функции (например, при нажатии кнопки * $ ("# btnS"). On ('click', function() {.... *) и некоторые другие. Функция Grid_OnRowSelect и другие функции используют общий набор переменных. Как я могу передать переменный внешний файл JavaScript с точкой зрения (cshtml), которые могут быть доступны всеми функциями.Как передать переменные внешнему файлу javascript, к которому можно получить доступ ко всем функциям

@(Html.Kendo().Grid<MyModel>() 
.Name("rGrid") 
.Events(events => events.Change("Grid_OnRowSelect")) 
.Columns(columns => 
{ 
    columns.Command(command => 

....... 
....... 
....... 

внешнего JS файл

var MYFunc = MYFunc || (function() { 
var _args = {}; // private 

return { 
    init: function (Args) { 
     _args = Args; 
     // some other initialising 
    }, 
    helloWorld: function() { 
     alert('Hello World! -' + _args[0]); 
    }, 
    Grid_OnRowSelect: function (e) { 

     var data = this.dataItem(this.select()); 
     detailRequestID = data.ID; 

     var url = _args[1] + "/" + detailRequestID; 
     window.location.href = url; 
    }, 
    onError: function (e, status) { 
     //alert("A server error has occurred!"); 
     var url = _args[2]; 
     window.location.href = url; 

    } 
}; 

}());

Как я пытаюсь передать аргументы

<script> 
    window.onload = function(){ 
    var searchUrl = @Url.Action("Search"); 
    var updateUrl = @Url.Action("Update"); 
    var errorUrl = @Url.Action("ServerError", "Error"); 
}; 
MYFunc.init([searchUrl, updateUrl, errorUrl]);</script><script src="~/Scripts/Index.js"></script> 

Но когда Grid_OnRowSelect или любой из функций запускается на выполнение _args является неопределенным. Что не так?

Спасибо.

ответ

0

Если вы просто объявляете переменную за пределами функции в javascript, она будет доступна ко всему коду JS-кода, загружаемому ПОСЛЕ его. Тот факт, что файл является внешним, не имеет значения, просто он загружается в DOM после того места, где вы устанавливаете свои глобальные переменные.

Пример

var globalVar = "I am global"; 
function test(){ 
    var copy = globalVar;//copy now == "I am global" 
    var nonglobalVar = "I am not";//this is local to the function 
} 
var global2 = globalVar;//global2 now == "I am global" 
var anotherVar = nonglobalVar;//this line will throw an error because variable is out of scope. 

Другая общая тактика писать свои значения в скрытом поле в HTML, а затем получить доступ, что из ваших внешних функций.

 Смежные вопросы

  • Нет связанных вопросов^_^