2014-10-12 59 views
0

我有一个项目列表。通过点击一行,我看到编辑表单。绑定工作很好,第一次点击。但无论我点击第二,第三等时间,我都会看到填充了第一次点击的值的表单。knockout.js绑定值只有一次

商品代码初始化:

self.newManager = { 
     UserId: ko.observable(), 
     CustomerId: ko.observable(), 
     UserName: ko.observable(), 
     DisplayName: ko.observable(), 
     Email: ko.observable(), 
     IsActive: ko.observable(true), 
     Password: ko.observable(), 
     ConfirmPassword: ko.observable(), 
     Roles: ko.observableArray() 
    } 

了解详细信息代码:

self.getManagerDetail = function (item) { 
    self.newManager.UserId(item.UserId); 
    self.newManager.UserName(item.UserName); 
    self.newManager.DisplayName(item.DisplayName); 
    self.newManager.Email(item.Email); 
    self.newManager.IsActive(item.IsActive); 
    self.newManager.CustomerId(item.CustomerId); 
    self.newManager.Roles(item.Roles.$values); 

    self.showManagerForm("editManagerForm"); 
} 

HTML表单:

<form class="form-horizontal" id="editManagerForm" style="display: block;" data-bind="submit: editManager"> 
<div class="form-group" data-bind="with: newManager"> 
<label class="control-label">Login</label> 
<div data-bind="text: UserName"></div> 
<label class="control-label" for="DisplayName1">Name</label> 
<div> 
    <input class="form-control" id="DisplayName1" type="text" data-bind="value: DisplayName" data-val="true"> 
</div> 

<label class="control-label" for="Email1">Email</label> 
<div> 
    <input class="form-control" id="Email1" type="text" data-bind="value: Email" data-val="true"> 
</div> 

<label class="control-label">Is active</label> 
<div> 
    <input class="form-control" id="IsActive" type="checkbox" data-bind="checked: IsActive" data-val="true"> 
         </div> 
<label class="control-label">Roles</label> 
<div data-bind="foreach: $root.roles"> 
    <div class="checkbox"> 
    <label> 
     <input type="checkbox" value="God" data-bind="checked: $parent.Roles, value: $data"> 
     <span data-bind="text: $data">God</span> 
     </label> 
    </div> 

     <div class="checkbox"> 
      <label> 
       <input type="checkbox" value="MarketingGuy" data-bind="checked: $parent.Roles, value: $data"> 
       <span data-bind="text: $data">MarketingGuy</span> 
      </label> 
     </div> 

     <div class="checkbox"> 
      <label> 
       <input type="checkbox" value="Accountant" data-bind="checked: $parent.Roles, value: $data"> 
       <span data-bind="text: $data">Accountant</span> 
      </label> 
     </div> 

     <div class="checkbox"> 
      <label> 
       <input type="checkbox" value="Manager" data-bind="checked: $parent.Roles, value: $data"> 
       <span data-bind="text: $data">Manager</span> 
       </label> 
      </div> 
     </div> 
    </div> 
    <button class="btn btn-default ajaxbutton" type="submit">Сохранить</button> 
</form> 

我在调试器中的步骤检查self.getManagerDetail一步。按照我的预期设置值 - self.newManager值设置为单击项目的值。

什么可能是这种行为的原因?

+0

你可以请你的代码/ HTML从你调用'getManagerDetail'吗? – nemesv 2014-10-12 14:20:05

+0

如果可能,请发布viewmodel代码,以便我们可以看看 – 2014-10-12 14:41:46

+0

感谢您的参与!我找出原因并贴出来。 – IAfanasov 2014-10-12 14:43:56

回答

1

此行为是由一个对象self.newManager绑定到两个表单造成的。我用它来编辑和创建表单。一旦我改变代码使用一个对象的编辑形式和另一个创建形式,它开始工作就好了。

希望它是有用的。

在事情刚刚解释的情况下,我们再次获得成功的魔力。

+0

你自己弄明白了 – 2014-10-12 14:44:33