微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

哪种设计模式适合在 javascript 中接收来自不同前端到单个后端的投标

如何解决哪种设计模式适合在 javascript 中接收来自不同前端到单个后端的投标

我需要一些指导,我正在开发一个提供投标的 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 举报,一经查实,本站将立刻删除。