2014-04-02 17 views
2

當我從我的Kendo下拉列表中選擇一個綁定到MVVM可觀察項的選項時,出現錯誤「n.get不是函數」。Kendo在下拉列表中的MVVM異常:'n.get不是函數'

可觀察看起來是這樣的(這是它只是一小部分):

VAR myObs = kendo.observable({ isBusy:假的,

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"> 

這似乎表明,綁定下拉列表的實際值時,什麼是錯的。它可以設置原始值,但在選擇更改時引發異常。

+0

您使用的是哪種版本的劍道?我將你的代碼粘貼到一個jsbin中,並且它完美地工作(必須將data.LanguageGuid更改爲列表中的一個)。 http://jsbin.com/codun/1/edit –

+0

嗨@RobinGiltner,我發現了這個問題。這是因爲我沒有將JSON對象轉換爲可觀察對象。查看我的答案瞭解更多細節。感謝您輸入BTW。 – Jacques

回答

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); 
}) 
在完成處理

結果的說法是有2個屬性一個JSON對象:

  1. HTML和
  2. clientViewModel

以前當我設置that.data我做到了而沒有將其轉換成kendo可觀察的,如:

that.data = result.clientViewModel; 

這就是爲什麼當它試圖訪問一個名爲'get'的函數時拋出異常。

1

在我來說,我在做一個本地綁定,並且不使用餵養視圖模型設置kendo.observable

像這樣的方法:

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

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

這樣的下拉列表顯示listValues正確,但是當你選擇一個,那麼你會得到錯誤'n.get不是函數'

使用

填充viewModel.listValues劍道的設定方法:

解。可觀察

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