2017-03-17 101 views
0

我現在用的是淘汰賽JS後更新,我有工作刪除功能,但我的UI是不是有缺失的更新,它會顯示已刪除的項目,即使在我DB,數據已被刪除,我該如何解決? 代碼:淘汰賽JS:UI不會刪除項目

function UserViewModel() 
    { 
    var self=this; 
     self.UserProfile = ko.observableArray([]); 

     //Get user all details 
     self.GetUserDetails=function(){  
     $.ajax({ 
     type: "POST", 
     dataType: "json", 
     data: Model, 
     url: serverUrl + 'api/controller/Action', 
     success: function (data) { 
     var UserDetailsmappedData = $.map(data, function (item) { 
        return new userModel(item); 
       }); 
    self.UserProfile (self.UserProfile().concat(UserDetailsmappedData)); 
     }, 
     }) 
     } 

     //Delete Profile 
     self.DeleteUserProfile = function (UserProfile) 
     { 

     var ProfilestatusID = (UserProfile.UserProfileID()) 
     console.log(ProfilestatusID) 
     Model = { userID: ProfilestatusID } 

     jQuery.support.cors = true; 

     $.ajax({ 
     type: "POST", 
     dataType: "json", 
     data: Model, 
     url: serverUrl + 'api/controller/Action', 
     success: function (data) { 
      self.GetUserDetails(); 
     }, 
     }) } 

//My Model 
function userModel(data){ 
    self.userId=ko.observable(data.userID); 
    self.userName=ko.observable(data.userName); 
    self.userImage=ko.observable(data.userImage) 
    } 

    $(document).ready(function() { 
    viewModel=new UserViewModel(); 
    ko.applybindings(viewModel) 
    }); 

回答

1

您刪除永遠不會從observablearray刪除,因爲舊的陣列總是被與GetUserDetails後更新的一個()調用合併的用戶配置文件。

最好的事情是,如果你只是從成功的回調,而不是()再次調用GetUserDetails數組中刪除用戶配置文件。所以:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    data: Model, 
    url: serverUrl + 'api/controller/Action', 
    success: function (data) { 
     self.UserProfile.remove(UserProfile); //DB is already updated, no 
               //need to call 
               // GetUserDetails() again 
    }, 
    }) } 

或者,如果你想保留已刪除項目的陣列因任何原因,只更新用戶配置,如:

UserProfile.deleted(true) 
+0

感謝您的時間,它爲我工作。 –

+0

當我打電話self.GetUserDetails,我不能清除它,並再次重新綁定self.UserProfile –

+0

對不起,我不太明白你的問題。只需在應用程序啓動時調用GetUserDetails()一次,然後填充UserProfile obervablearray,如下所示:self.UserProfile(UserDetailsmappedData); – opp

0

刪除後,您應該從可觀察移除已刪除項目陣列self.UserProfile,這裏self.UserProfile(self.UserProfile().concat(UserDetailsmappedData));看來你是串聯結果到現有陣列

+0

@thanks您的時間 –