2017-03-17 97 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您的时间 –