2014-05-16 29 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); 
相关问题