我有一个模板中的 kendoUI 下拉列表并绑定到 ViewModel,以及绑定到下拉列表中选择的数据项的跨度:
<p>
<label>Appointment Type: </label>
<select id="appointmentTypeDropDownList"
data-text-field="Name"
data-value-field="AppointmentTypeId"
data-role="dropdownlist"
data-bind="source:appointmentTypes, value:AppointmentTypeId"
data-autobind="true"
data-select="onSelected" />
</p>
<p><label>Duration:</label>
<span data-bind="text:selectedAppointment.Duration"></span> minutes
</p>
我的视图模型:
var viewModel = new kendo.observable({
appointmentTypes: appointmentTypesDataSource,
selectedAppointment : null,
});
最初,我使用硬编码的约会类型数组,并在上面的 viewModel 声明中将 selectedAppointment 设置为约会类型 [0]。这现在不起作用,因为数据源是异步加载的。viewModel 在 onSelected 函数中更新:
var onSelected = function (e) {
var dataItem = this.dataItem(e.item.index());
viewModel.set("selectedAppointment", dataItem);
};
模板在一个窗口中,第一次加载时跨度为空,然后工作(一旦从第一个请求加载数据)。
我的问题是,如何让 span 的数据绑定在第一个请求上工作,以便它显示数据源返回的列表中当前选择的约会类型的持续时间?我是否尝试将其绑定到下拉列表的选定数据项?我应该在某个地方使用回调来执行此操作吗?模板位于 kendoScheduler 中,如果这很重要:
var template = kendo.template($("#editor").html());
$("#scheduler").kendoScheduler({
editable: {
template: template()
}
});
谢谢!
更新:我一直在使用的模板是 Kendo UI Scheduler 的编辑器,它没有绑定到它的视图模型,而是使用部分视图模型作为它的数据源。在这种情况下,尝试使用 data-bind="events:{...}" 语法会导致我遇到奇怪的类型错误。为了连接数据绑定事件,Atanas 让我知道使用 data-bound="onDataBound" 和全局处理函数(或者以声明方式配置我的调度程序并将其绑定到视图模型)。使用数据绑定结合下面的答案对我有用。