MVC场景中的JavaScript事件与回调

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

我试图找出一个很好的方式来获得视图和控制器,并最小化它们之间的关系。

除了一个事件的多个订阅者,这样的js代码之间有什么主要区别:

var customers = {
    get: function(callback) {
        $.get('/customers', {}, function(data) { 
            callback.call(this, data); 
        });
    }
};

而像这样的事件驱动方法(事件对象只是伪代码):

var customers = {
    get: function() {
        $j.get('/customers', {}, function(data) { 
            event.publish('customers.loaded', data); 
        });
    }
};

在这两种情况下,消费者对象的消费者都不知道其内部运作方式。一种方式比另一种方式有优势吗?

提问于
用户回答回答于

事件是回调,但区别在于它们绑定的时间和位置。在第一种情况下,您需要在被调用时引用回调get,另外它仅限于一次回调。

在第二种情况下(假设您使用该伪代码触发事件),您可以将回调绑定在调用范围之外get,从而实现更强大的数据封装。此外,事件支持触发多个回调,因此可以根据访问customers对象的内容执行不同的功能。

因为JavaScript是面向事件的语言,所以我建议使用面向事件的解决方案。

用户回答回答于

答案非常简单:因为一个事件可能有无限的事件处理程序(这只是回调),而回调只是一个回调,所以我建议您采用事件驱动的编程方法。

扫码关注云+社区