问题描述
我需要一些指导,我正在开发一个提供投标的 wordpress 插件。
有两种类型的用户可以为拍卖出价。能够代表任何用户对任何拍卖出价的实际用户或管理员。
从前端,用户可以出价,后端管理员可以代表用户出价,并且有一个实时表格呈现所有出价。但问题是,当管理员添加出价时,它会显示在表格中,但是如果来自前端的任何用户出价,这不会在同一个表格中弹出..您必须重新加载页面以查看是否有任何出价从前端出现。
我在 ajax 调用中使用了 setInterval()
,但问题在于 setIntervel,如果前端用户有任何出价,它会一次又一次地加载。
有人建议遵循观察者设计模式来解决这个障碍。我试过但没有运气...
我认为观察者设计模式在这里帮不了我。
// The news class is the Observable class or "subject"
class News {
// A list of observers
constructor() {
this.observers = [];
}
// Method for subscribing to,or "observing" observable
addSubscriber(subscriber) {
this.observers.push(subscriber);
}
// Method for unsubscribing from observable
unsubscribe(subscriber) {
var index = this.observers.indexOf(subscriber);
this.observers.splice(index,index);
}
// Method for sending data to subsribers
transmit(data) {
console.log('transmit: ',data);
this.observers.forEach(subscriber => subscriber.receive(data));
}
}
// The News Outlets are subscribers to the news in different languages
class NewsOutlet {
// We will set the language when we instantiate the news outlet
constructor() {
this.data = '';
this.news = '';
}
receive(data) {
this.data = data;
var self = this;
// Translate after receiving
jQuery.ajax({
url: Observer.ajaxurl,type : 'POST',encoding: 'UTF-8',dataType: 'JSON',data: {
action: 'get_live_room_auction_status',last_timestamp : Observer.last_timestamp
},success: function(result) {
self.news = result;
self.reportTheNews();
}
});
}
reportTheNews() {
// A shady workaround for our HTML efforts!
jQuery('.bidders-list tbody').append(this.news);
// document.getElementById(elemId).innerText = this.news;
}
}
let news = new News;
let enOutlet = new NewsOutlet();
news.addSubscriber(enOutlet);
var sendNews = function( auction_id,timestamp ) {
news.transmit(timestamp);
news.observers.forEach(function(o){
o.reportTheNews();
});
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)