为什么我的KendoUI Widget被返回为未定义?

时间:2017-10-09 14:22:48

标签: jquery razor kendo-ui datetimepicker

我正在编写一些jquery来处理我的KendoUI Widgets for MVC提供的值。我一直在关注他们自己的文档,但我遇到的问题是小部件返回undefined。我看到的第一个地方就是他们的故障排除,他们要求你说出所有脚本的顺序正确,并且没有重复的jQuery引用。我已经做到了这一点,但仍然遇到问题。

小部件作为undefined返回的问题似乎仅限于剑道日期/时间选择器。

以下是使用Razor视图在HTML中定义的小部件。

@(Html.Kendo().DateTimePicker()
  .Name("estDept")
  .Value(DateTime.Now))

我有一个在页面加载时以及按下特定按钮时运行的函数。获取值的代码如下:

function voyageTime() {
    var estDeparture = $("#estDept").data("kendoDateTimePicker");
    console.log(estDeparture.value());
};

首次加载页面时,此代码可以正常运行,但如果您刷新,则会收到错误消息estDeparture is undefined。我尝试将代码添加到文档就绪函数$(function(){ ... });,该函数可以正常工作,但它不是我希望它存在的地方。因此,为了测试,我将文档中的窗口小部件定义为全局变量,如下所示:

$(function(){ 
    //I missed out var to define a global scope
    estDeparture = $("#estDept").data("kendoDateTimePicker");
    console.log(estDeparture.value());
});

当我从我的函数访问上面的全局变量时,我得到了相同的未定义错误,就像它无法将它传递给静态函数一样。

我在这里做错了什么,以及为什么定义的小部件一直被返回为未定义?

1 个答案:

答案 0 :(得分:0)

我并不熟悉Telerik的Kendo库,但听起来您的元素可能无法在刷新时重新注册DOM。我在更新部分视图之前遇到过这个问题(我假设它与Kendo元素类似)。问题是,当部分视图最初呈现时,所有DOM元素都会被注册,因此它们存在于相应的事件中。但是,在部分视图刷新之后,局部视图中的所有元素都是" new"并且不再在DOM事件中注册。我克服这个问题的方法是使用"文档"来编写我的jquery函数。对象(而不是特定的dom对象)。

部分观点:

<div id="reloadedWidget">   
    <input id="reloadedElement" type="text" />
</div>

例如:
我写的是这样的( 在部分刷新 后起作用):

<script>
$(document).on('change', '#reloadedElement', function(){ 
    var estDeparture = $(this).data("kendoDateTimePicker");
    console.log(estDeparture.value());
}); 
</script>

而不是写( 在部分刷新后 ):

<script>
$('#reloadedElement').onChange(function() 
{ 
    var estDeparture = $(this).data("kendoDateTimePicker");
    console.log(estDeparture.value());
}); 
</script>

<强> Click here for example code