0

Events プロパティが外部 JavaScript ファイルの関数 (Grid_OnRowSelect) にフックされている剣道グリッドがあります。外部 JavaScript ファイルには他の関数があります (on ボタン クリック* $("#btnS").on('click', function () {....* ) など)。 Grid_OnRowSelect 関数と他の関数変数の共通セットを使用する すべての関数からアクセスできるビュー (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 は未定義になります。正しくないのはどれですか?

ありがとう。

4

1 に答える 1

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.

もう 1 つの一般的な戦術は、値を html の非表示フィールドに書き込み、外部関数からそれにアクセスすることです。

于 2016-06-14T19:11:14.960 に答える