0

所以我正在通过淘汰赛将数据与元素绑定。然后有一个局部视图,当我单击一个按钮时会呈现。到目前为止一切正常,我得到了部分所需的正确数据。问题是我有一个输入,我想像 kendoDatePicker 一样行事,但它不会。我注意到,当我单击按钮以呈现部分视图时,它执行正确的方法并获取正确的数据,但它使用相同的方法 $("#id").kendoDatePicker();但是 DOM 元素尚未呈现,我想这就是问题所在。我试图敲除绑定元素,例如:<input data-bind="kendoDatePicker: {value: startDate}"/>但甚至日期都不存在。请注意,当我删除“with”活页夹时,部分视图中的主 div 是这样绑定<div data-bind="with: $root.shift"> <input id="randomId" data-bind: Start"/> //thats not showing in the main DOM until I the partial is loaded</div>的,我看到了这个部分中的所有元素,但我失去了按钮的功能。

有人遇到同样的问题吗?我有什么要做/改变以使其工作吗?

4

1 回答 1

0

你是对的,在 DOM 中没有元素是问题所在。请注意,knockout 负责处理 DOM 更改,因此尝试抓取元素并在 knout 之外对它们做一些事情并不是一个好习惯。

相反,使用淘汰赛自定义绑定。它们允许您创建一个自定义绑定,该绑定对 DOM 元素进行操作,以了解剔除以及他如何处理它们。所以:

ko.bindingHandlers.kendoDatePicker = {
    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
      //here you can access (and possibly pass it to the options) the 'value' by callnig valueAccessor().   
      $(element).kendoDatePicker();
    }
};

ko.applyBindings({});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="http://kendo.cdn.telerik.com/2017.1.118/js/kendo.all.min.js"></script>
 <link rel="stylesheet" href="http://kendo.cdn.telerik.com/2017.1.118/styles/kendo.common.min.css" />

<input id="datepicker" value="10/10/2011" style="width: 100%" data-bind="kendoDatePicker: {value: 'somevalue'}" />

于 2017-02-15T10:56:02.343 回答