javascript - Backbone js - 减少对服务器的调用

标签 javascript backbone.js

只是想知道人们如何处理停止多个外部服务器调用?我正在获取的 .complete 中执行所有操作,因为否则当我尝试调用任何内容时,获取尚未完成,并且集合中不会填充任何内容。

我是 Backbone 新手,所以我可能错过了一个技巧..但是有没有一种方法可以获取并将该信息存储在某个地方,这样你就不必再次获取,你只需将集合作为一个多变的?我的所有信息都来自外部站点,因此如果可以的话,我不想进行大量不必要的外部调用。我没有更新服务器或任何东西,它只是只读的。

其他人对类似的设置做了什么?我错过了一些愚蠢的事情吗?或者我为此设置得很糟糕?这是我到目前为止所拥有的(正在进行中)

哦还有:我正在路由器中进行提取..这是一个坏主意吗?

http://jsfiddle.net/leapin_leprechaun/b8y6L0rf/

.complete(
    //after the fetch has been completed
    function(){
        //create the initial buttons
        //pull the unique leagues out
        var uniqueLeagues = _.uniq(matches.pluck("league"));

        //pull the unique leagues out   
        var uniqueDates = _.uniq(matches.pluck("matchDate"));

        //pass to info to the relative functions to create buttons   
        getLeagues(uniqueLeagues);
        getMatchDates(uniqueDates);
        homeBtn();
        fetched = true;
    }
); //end complete

感谢您的宝贵时间!

最佳答案

这是一个经常重复出现的问题,但答案相当简单。
如果有帮助的话,也许我今天会画一些图。
我从来没有花时间正确学习 UML,所以请原谅我。

<强>1。问题

您当前拥有的是:

enter image description here

但问题是这不是很动态。
如果右侧的这 3 个函数需要从不同的 ajax 回调函数执行,则需要将它们添加到任何这些回调中。
想象一下,您想要更改这 3 个函数中任何一个的名称,这意味着您的代码将立即中断,并且您需要更新每个回调。

您的问题表明您认为您希望避免每个函数单独执行异步调用,事实确实如此,因为这会产生不必要的开销。

<强>2。事件聚合

解决方案是实现事件驱动的方法,其工作原理如下:

enter image description here

此模式也称为发布/订阅(或观察者模式),因为存在发布事件的对象(在本例中为左侧)和订阅的对象(在右侧)。
使用这种模式,您不需要在 ajax 回调完成后显式调用每个函数;相反,对象订阅某些事件,并在事件触发时执行方法。这样您就始终可以确定这些方法将被执行。
请注意,触发事件时,也可以传递参数,这允许您从订阅对象访问集合。

<强>3。 Backbone 实现

Backbone 提倡事件驱动的方法。
设置事件聚合器很简单,可以按如下方式完成:

window.APP = {};
APP.vent = _.extend({}, Backbone.Events);

从ajax回调中,您只需触发一个事件(您可以给它任何您想要的名称,但按照惯例,分号用作分隔符):

APP.vent.trigger("some:event", collection);  

三个接收对象订阅事件如下:

APP.vent.on("some:event", function(collection){ 
    console.log(collection.toJSON()); 
}); 

这基本上就是全部。
需要考虑的一件事是,确保当您使用“on”订阅事件时,如果您不再需要该对象,还需要通过调用“off”取消订阅。

关于javascript - Backbone js - 减少对服务器的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27755976/

相关文章:

javascript - 如何使用 external.IsSearchProviderInstalled 函数?

javascript - Ruby on Rails 应用本地主机互联网连接

backbone.js - 在 IE8/9 中使用 Backbone 发出 CORS 请求

javascript - 无法从文本框中输出值的乘法(可能是 NAN)-Backbone.js

javascript - Backbone.js 模型删除失败

jquery - Backbone.Model.save 和 Promise

javascript - 在嵌套的 js 对象数组中搜索

javascript - 根据浏览器大小加载文件

javascript - HTML DIV 作为另一个 DIV 的背景

javascript - 如何将委托(delegate)事件分配给特定的 Dom 元素