2015-03-03 166 views
0

检查我创建了一个用的jsfiddle我的代码:http://jsfiddle.net/hw7c9b76/但它并不真正不幸的是显示的问题,因为数据不具有持续性。复选框在默认情况下knockout.js

当我在数据库中有几个条目,我重装,复选框都被检查并显示应该被隐藏的领域,即使编辑属性设置为false。

有没有一种办法,以确保这些字段是隐藏的,按钮上载选中?

下面是HTML,因为计算器犯规让我没有张贴代码的jsfiddle链接被包括:从服务

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Knockout experiment</title> 
</head> 

<body> 
    <form data-bind="submit: addFriend"> 
     Add Friend: <input data-bind="value: newFriendNameText" placeholder="Name" /> <input data-bind="value: newFriendAgeText" placeholder="Age" /> 
     <button type="submit">Add</button> 
    </form> 
    <ul data-bind="foreach: friends"> 
     <li> 
      <span data-bind="text:name"></span> 
      <span data-bind="text:age"></span> 
      <input data-bind="visible: editable, textInput: name" /> 
      <input data-bind="visible: editable, textInput: age" /> 
      <a href="#" data-bind="visible: editable, click: $parent.updateFriend">Save Edits</a> 
      <input type="checkbox" value="edit" data-bind="checked:editable">Make Edits</a> 
      <a href="#" data-bind="click: $parent.removeFriend">Delete</a> 
     </li> 

    </ul> 
    <pre data-bind="text: ko.toJSON($data, null, 2)"></pre> 
    <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min.js"></script> 
    <script src="knockout-mapping.js"></script> 
    <script src="script.js"></script> 
</body> 
</html> 
+0

查找范围,当你重装控制台,是否有任何约束力的错误?有时会发生这种情况,然后阻止进一步绑定页面。 – 4imble 2015-03-03 15:10:40

回答

0

的数据不一致。不一致而从服务

friends = [{"name":"aaad","age":"30","editable":"false","id":1}, 
       {"name":"ffff","age":"4","editable":"false","id":2}, 
       {"name":"werw","age":"3","editable":"false","id":3}]; 

并返回编辑的值

数据数据应该是

friends = [{"name":"aaad","age":"30","editable":false,"id":1}, 
      {"name":"ffff","age":"4","editable":false,"id":2}, 
      {"name":"werw","age":"3","editable":false,"id":3}]; 

看看这个JS小提琴http://jsfiddle.net/Dnyanesh/k96tzdbz/(我抄你的代码,并取得了一定的chnages) 这小提琴按预期工作。

现在什么是可编辑的根本原因值将是false将被视为是真的。由于JavaScript中没有类型安全性,因此您的值“false”也正在考虑并且可编辑设置为true。

如果您无法控制所使用的服务的数据来源,您可以将eiditable的值始终设置为false。我更新了下面的变化小提琴。 http://jsfiddle.net/Dnyanesh/k96tzdbz/1/

 ko.utils.arrayForEach(friends, function(fr){ 
      var frdCls = new FriendClass(fr) 
      self.friends.push(frdCls); 
     }); 

在这种情况下,无论数据来自服务将被设置为false。

+0

所以这个服务没有一个可编辑的字段,但是有没有一种方法可以在加载模型中将所有这些设置设置为false? – user1469779 2015-03-03 18:45:55

+0

我不是说“不具备可编辑的字段”。我是说如果编辑字段数据来像“编辑”:假的,而不是“编辑”:“假”,你的工作将得到完成。如果因为数据来自第三方而失控,那么就需要考虑其他方法。 – Dnyanesh 2015-03-03 18:54:53

+0

感谢您的帮助!我注意到映射插件的调用已被注释掉,但仍然按预期工作。每个fr作为FriendClass的一个实例的这种赋值是否与映射插件做同样的事情? – user1469779 2015-03-06 13:31:39