下拉列表中的Kendo MVVM异常:'n.get不是函数'

时间:2014-04-02 08:39:40

标签: kendo-ui kendo-mvvm

当我从我的Kendo下拉列表中选择一个绑定到MVVM observable的选项时,我收到错误'n.get is not a function'。

observable看起来像这样(这只是它的一小部分):

var myObs = kendo.observable({     isBusy:false,

data: {
    LanguageGuid: '7e433f51-16e8-44e0-bf08-6843baa642bd',
    LanguageList: [
        { "Code":"English","Guid":"3aac23ff-36d3-405c-bf0c-531510a71c39" },  
        { "Code":"Afrikaans","Guid":"5bfe95f8-d8f8-4858-b214-9ffef84adfed" },  
        { "Code":"Zulu","Guid":"5a369509-1070-4f8a-9bdb-e4b4ca4e9590" }]
}

这是HTML:

<input type="text" value="7e433f51-16e8-44e0-bf08-6843baa642bd" name="LanguageGuid" id="LanguageGid" data-value-field="Guid" data-text-field="Code" data-role="dropdownlist" data-bind="source: data.LanguageList, value: data.LanguageGuid" class="valid">

其他字段完美绑定,MVVM完成工作,只是没有这个列表。

编辑:我删除了列表的值绑定,以阻止异常被引发:

<input type="text" value="7e433f51-16e8-44e0-bf08-6843baa642bd" name="LanguageGuid" id="LanguageGid" data-value-field="Guid" data-text-field="Code" data-role="dropdownlist" data-bind="source: data.LanguageList" class="valid"> 

这似乎暗示在绑定下拉列表的实际值时出现问题。它用于设置原始值,但在更改选择时会引发异常。

2 个答案:

答案 0 :(得分:2)

我最终发现,在从ajax调用返回并将其绑定到视图之前,我没有将JSON对象转换为observable。

$.ajax({
    url: rootPath + "/profile/editprofile",
    type: "GET",
    data: "clientCode=xxx"
})
.done(function (result)
{
    $("#viewEditorContent").html(result.html);

    that.data = kendo.observable(result.clientViewModel);

    that.editForm = $("#viewEditorContent form");

    $.validator.unobtrusive.parse(that.editForm);

    kendo.bind($("#viewEditorContent"), that);
})  

在done处理程序中,result参数是一个具有2个属性的JSON对象:

  1. html和
  2. clientViewModel
  3. 之前当我设置那个data时,我没有将其转换为kendo observable,如下所示:

    that.data = result.clientViewModel; 
    

    这就是在尝试访问名为“get”的函数时抛出异常的原因。

答案 1 :(得分:1)

在我的情况下,我正在进行本地绑定并在不使用 kendo.observable set 方法的情况下提供viewModel

这样的事情:

viewModel = kendo.observable({ 
    listValues: null,
    selectedValue: null,
});

<script>
    $(document).ready(function () {
        viewModel.listValues = [...]; // Wrong way initializing the viewModel
    });
</script>

这样dropDownList会正确显示listValues,但是当你选择一个时,你会得到错误'n.get不是函数'

<强>解决方案:

使用 kendo.observable

的set方法填充 viewModel.listValues
<script>
    $(document).ready(function () {
        viewModel.set('listValues', [...]); // Correct way initializing the viewModel
    });
</script>