-1

我能想到的一种方法是在表单上有一个隐藏字段来存储updated_at正在更新的记录的时间戳,fetched_at然后在提交表单时updated_at将数据库记录的值与fetched_at来自请求数据的值进行比较。

如果updated_at从数据库> fetched_at返回一个响应,表明该记录在被提取进行编辑后已经更新,并提示用户进行刷新。

在这种情况下,用户将刷新记录并重新进行所需的编辑。

有没有更好的方法来解决这个问题?我的意思是当任何用户当前正在编辑/更新记录时,是否可以锁定记录,使其对所有其他用户不可用/只读?

4

1 回答 1

0

如果我理解正确,那么您需要的是,当用户要更新记录时,他应该在发送更新之前查看最新更新的值。fetched_at和updated_at用例应该可以工作。

锁定记录我不认为这是一个好主意。您将不得不经历另一个解锁记录的过程。例如,如果用户获取记录并花费大量时间将其更新回来,或者更糟糕的是,如果用户拉起记录并离开办公桌去执行另一项任务,或者由于某种原因用户的会话被切断 -由于一些错误或互联网问题等而关闭。

您可以尝试另一种方式,不断轮询数据库,并比较在用户提取进行编辑时记录是否发生了更新。如果发生更新,则显示一条标签消息,说明该记录最近已更新。Vuejs + ajax 或 Vuejs + axios 确实提供了创新的方式来进行轮询。

此处的这篇文章展示了一种进行轮询的方法。

new Vue({
  el: '#app',
  data: {
    items: [],
    interval: null,
  },
  methods: {
    loadData: function () {
      $.get('/api/data', function (response) {
        this.items = response.items;
      }.bind(this));
    }
  },
  ready: function () {
    this.loadData();

    this.interval = setInterval(function () {
      this.loadData();
    }.bind(this), 30000); 
  },

 beforeDestroy: function(){
clearInterval(this.interval);
}
});

<div id="app">
  <div v-for="item in items">{{ item.prop }}</div>
</div>

在评论中,他们确实谈到了类似于 nodejs广播的pusher

于 2019-09-02T03:21:24.040 回答