剑道UI - Java脚本事件处理程序(代码分离+参数)

Kendo UI - Java script event handlers (code separation + parameters)

本文关键字:分离 代码 参数 程序 UI Java 脚本 事件处理 剑道      更新时间:2023-09-26

我在ASP中使用了剑道ui树视图控件。. NET MVC剃刀视图。在Kendo UI示例中,java脚本事件处理程序总是直接嵌入到视图中(我认为这是一种不好的做法)。我想这只是由于简化,但我现在已经在"myView.js"文件中的"脚本/视图"文件夹中将JS事件处理程序分离为单独的JS文件中的视图。现在我有问题了,我的资源字符串不再正确显示了。我的想法是将资源字符串作为视图中的附加参数传递给js事件处理程序,但我不知道该怎么做。下面我添加了我的代码示例。

View.cshtml:

<script src="@Url.Content("~/Scripts/views/myView.js")" type="text/javascript"></script>
@(Html.Kendo().TreeView()
     .Name("treeview")
     .BindTo((IEnumerable<TreeViewItemModel>)Model.MyTreeViewItemModel)
     .Events(events => events
         .Select("onSelect") // how to pass parameters to onSelect?
     )
)

myView.js:

function onSelect(e) {
     var node = this.dataItem(e.node);
     // ... here I do something with node which works fine
     addAlert("@Resources.MessageDeleteSuccess"); // here I call my addAlert function which worked in the view, but not after moving the function to the JS-file
}

总结一下我的问题是:

  1. 是我如何将JS事件处理程序从我的视图(在单独的JS文件)的最佳实践,还是我应该怎么做?

  2. 我如何添加参数到事件处理程序,如"OnSelect"?

From http://www.telerik.com/forums/passing-arguments-from-grid-event:

当前发送额外参数到事件处理程序是无效的支持,但是请注意,在处理程序中您可以访问通过使用"this"关键字

调用者

我对事件处理程序的"this"参数(Kendo Grid)的经验是,它几乎没有提供有用的信息。例如,我不知道如何从"this"中获取网格的UI元素。

一个解决方法是在本地定义一个处理程序,然后用你想要的参数调用myView.js中的处理程序。例如,你的处理程序可以是"viewOnSelect",在View.cs中,你将有
function viewOnSelect(e) {
    onSelect(e, '@Resources.MessageDeleteSuccess');
}