Kendo ui 剑道与MVVM自动完成|未设置绑定对象

Kendo ui 剑道与MVVM自动完成|未设置绑定对象,kendo-ui,Kendo Ui,我正在使用Telerik的Kendo UI和他们的autocomplete小部件以及他们的MVVM框架,并且在获取一个框以将检索(和选择)的对象设置为视图模型上的绑定对象时遇到了一些困难。例如 var viewModel = kendo.observable({ Context: {} }); $("#context").kendoAutoComplete({ dataTextField: "Name", dataValueField: "Id", delay: 8

我正在使用Telerik的
Kendo UI
和他们的
autocomplete
小部件以及他们的
MVVM
框架,并且在获取一个框以将检索(和选择)的对象设置为视图模型上的绑定对象时遇到了一些困难。例如

var viewModel = kendo.observable({
  Context: {}
});

$("#context").kendoAutoComplete({
    dataTextField: "Name",
    dataValueField: "Id",
    delay: 800,
    dataSource: {
        dataType: "json",
        serverFiltering: true,
        transport: {
            read: {
                url: "/search/data",
                data: function (data) {
                        return {
                        term: data.filter.filters[0].value
                    }
                }
            }
        }
    }
}).data("kendoAutoComplete");
然后我使用下面的HTML

<input data-val="true"
       id="context"
       name="context"
       placeholder="Context"
       type="text"
       data-bind="value: Context" />
但是,当我在使用“自动完成”搜索对象后选择该对象时,viewmodel上的
Context
属性仍保持为
null

我可以通过添加一个特定的
select
函数来避免这种情况

select: function(e) {
    var dataItem = e.sender.dataItem(e.item.index()).toJSON();
    // update the model
    viewModel.set('Context', dataItem);
}

但我真的宁愿它像它应该的那样工作;有什么建议吗?

问题是您将
viewModel
定义为
可观察的对象,但没有将其绑定到
输入

尝试按如下方式添加绑定:

kendo.bind($("#context"), viewModel);

在这里检查:

是的,我在代码中有;对不起,我只是认为这是行为的一部分。页面中还有其他绑定,它们都绑定正确。但是我在回答中包含的JSFIDLE是否适合您呢?这仍然没有将属性设置为实际选定的项;您的示例只获得文本的实际标签。不幸的是,我的问题是我需要整个对象;不仅仅是名字。嘿,我花了更多的时间在你的演示上,我发现了一些东西;如果删除
dataValueField
并放入
valuePrimitive:false
,它将正确地将其设置为整个JSON对象!演示在这里:尽管我还有一个问题。当小部件首次加载时,它在文本框中显示为[Object]。有什么办法可以防止吗?
kendo.bind($("#context"), viewModel);