2014-10-28 73 views
0

我持有用戶列表,其詳細信息顯示在引導對話框中。該列表已正確填充,詳細數據以模式正確顯示。但只要我更新一個或多個輸入字段,關閉對話框並打開另一個用戶的詳細信息,我就會看到編輯的值而不是第二個用戶的值。如果我在不編輯任何內容的情況下打開細節,我總會看到正確的值。敲除:編輯的輸入字段沒有更新

問題: 在編輯輸入字段的情況下,所選用戶(詳細顯示)不會被覆蓋。

視圖模型:

function UserViewModel() { 
    // init 
    var self = this; 
    self.userList = ko.observableArray([]); 
    self.selectedUser = ko.observable([]); 
    self.availableGroups = ko.observableArray([]); 
    self.errors = ko.observableArray([]); 

    self.loadUserList = function() { 
     $.ajax({ 
      type : "POST", 
      url : "/user/loadUserList.htm", 
      success : function(response) { 
       var parsedJSON = $.parseJSON(response); 
       self.userList(ko.mapping.fromJS(parsedJSON)); 
      }, 
     }); 
    } 

    self.loadUserDetail = function(user) { 
     // Set selected user 
     self.selectedUser(ko.mapping.fromJS(user)); 

     // Load available groups 
     $.ajax({ 
      type : "POST", 
      url : "/user/loadAvailableGroups.htm", 
      success : function(response) { 
       var parsedJSON = $.parseJSON(response); 
       self.availableGroups(ko.mapping.fromJS(parsedJSON)); 

       registerClickListener(); 
       initOrdinaryTooltips(); 
       $("#user-dialog").modal('show'); 
      }, 
     }); 
    } 

    self.addUser = function() { 
     self.loadUserDetail(ko.observable([])); 
     $("#user-dialog").modal('show'); 
    } 

    self.saveUser = function() { 
     // select all assigned groups 
     $('#assigned-select option').prop('selected', true); 

     var formJson = $("#user-form").serializeArray(); 
     $.ajax({ 
      type : "POST", 
      url : "/user/saveUser.htm", 
      data: formJson, 
      success : function(response) { 
       var parsedJSON = $.parseJSON(response); 
       if(parsedJSON.errors.length == 0){ 
        $("#user-dialog").modal('hide'); 
       } else { 
        initErrorTooltips(); 
       } 
      }, 
      error : function(e) { 
       showErrorBox('Error: ' + e.status); 
      } 
     }); 
    } 

    self.cancel = function() { 
     $("#user-dialog").modal('hide'); 
    } 
} 

HTML:

<div class="form-group has-warning"> 
    <label class="control-label"><spring:message code="masterdata.user.firstName" /></label> 
    <input type="text" class="form-control input-sm" data-bind='attr:{value: selectedUser().firstName}' name="user.firstName" /> 
    <!-- ko foreach: errors() --> 
     <!-- ko if: key === 'user.firstName' --> 
      <span data-bind='text: value' class="spring-error fa fa-lg fa-exclamation-circle"></span> 
     <!-- /ko --> 
    <!-- /ko --> 
</div> 
+0

你能顯示你的html代碼嗎? – szpic 2014-10-28 08:02:17

+0

當然,請檢查更新。 – Tunguska 2014-10-28 08:11:39

回答

2

的HTML代碼段您提供的不顯示怎麼模態被打開,發生了什麼之前和之後。不過,我建議你使用value binding而不是attr綁定你的表單元素。

+0

確實是這個問題!只要我將attr綁定改爲綁定值,一切都像魅力一樣。 – Tunguska 2014-10-29 10:46:54