2014-05-16 27 views
0

我看到這個關於KO綁定和MVC的question,它讓我擔心。這個問題很長,我不知道它是否適用於我想要做的事情。需要特殊設置才能使Knockout與MVC模型綁定一起工作?

我有一個輸入:

<input 
    id="Item_ReqestedItem_ItemNumber" 
    type="text" value="" name="Item.ReqestedItem.ItemNumber" 
    data-bind="value: ItemNumberItem, disable: ItemNumberItem.isServerSet" 
    disabled=""> 

如果我手動鍵入一個值到該字段和POST,該值被傳遞到控制器/動作。如果我讓KO填充這些數據,那麼POST的值顯示爲空。

當我使用Knockout值時,將此值設置爲POST所需的最低工作量是多少?

  • 我沒有使用ko.editable。我需要它嗎?
  • 我沒有做任何事情來支持MVC和KO之間的文件準備就緒。我需要爲了完成這個簡單的任務嗎?

更新

的意見是正確的。它是導致值爲空的disable屬性。簡單fix是使用只讀。我仍然沒有解決這個問題。擺脫殘疾不是一種選擇。我沒有看到如何在不拋出KO框架的情況下切換到只讀模式。我如何將禁用的數據返回給服務器?我寧願用KO來解決這個問題,因爲我必須管理大約30個輸入。

+0

何時ItemNumberItem.isServerSet爲true?當你讓「KO填充這些數據」嗎? –

+0

是的,我嘗試刪除禁用,並沒有區別 –

+1

不是?好吧,我認爲這是因爲有些瀏覽器在禁用時沒有發送值 –

回答

0

無需特殊設置即可讓KO使用MVC。註釋是正確的,因爲disabled屬性導致數據不發佈。我添加了一個綁定處理程序來支持在KO中只讀。只讀應POST。 Fiddle

ko.bindingHandlers.readOnly = { 
    update: function(element, valueAccessor) { 
     var value = ko.utils.unwrapObservable(valueAccessor()); 
     if (value) { 
      element.setAttribute("readOnly", true); 
     } else { 
      element.removeAttribute("readOnly"); 
     } 
    } 
} 

var viewModel = { 
    text: ko.observable("test"), 
    locked: ko.observable(false) 
}; 


ko.applyBindings(viewModel); 
相關問題