backbone js - 减少对服务器的调用
backbone js - reduce calls to the server
只是想知道人们如何处理停止多个外部服务器调用?我在提取的 .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
感谢您的宝贵时间!
在 Backbone.js 中如何处理完全取决于您,但这是您可以采取的一种选择
创建一个以 body 作为其 el 的视图并处理所有内容。(我通常使用 Coffee,所以这可能有一些语法错误)
$( document ).ready(function() {
mainView = new MainView({el: "body"});
});
MainView = Backbone.View.extend({
initialize : function(){
this.prepareCollection();
},
prepareCollection : function(collection){
_checker = function(){
if (collection.length === _done) {
this.render();
}
};
_.bind(_checker,this);
collection.each(function(item){
item.fetch(
success : function(){
//you can also initialize router here.
_checker();
}
);
});
},
rener : function(){
//make instance of View whichever you want and you can use colleciton just like variable
}
})
这是一个经常重复出现的问题,但答案很简单。
如果有帮助,也许我今天会画一些图。
我从来没有花时间正确地学习 UML,所以请原谅我。
1.问题
您目前拥有的是:
然而,问题是这不是很动态。
如果右侧的这 3 个函数需要从不同的 ajax 回调函数中执行,则需要将它们添加到这些回调中的任何一个。
想象一下,您想更改这 3 个函数中的任何一个的名称,这意味着您的代码会立即中断,并且您需要更新这些回调中的每一个。
你的问题表明你觉得你想避免每个函数单独执行异步调用,确实是这种情况,因为这会产生不必要的开销。
2。事件聚合
解决方案是实施事件驱动方法,其工作方式如下:
这种模式也称为pub/sub(或观察者模式),因为有发布事件的对象(在本例中为左侧)和订阅事件的对象(在右侧)。
使用此模式,您无需在 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" 来 un-subscribe。
只是想知道人们如何处理停止多个外部服务器调用?我在提取的 .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
感谢您的宝贵时间!
在 Backbone.js 中如何处理完全取决于您,但这是您可以采取的一种选择
创建一个以 body 作为其 el 的视图并处理所有内容。(我通常使用 Coffee,所以这可能有一些语法错误)
$( document ).ready(function() {
mainView = new MainView({el: "body"});
});
MainView = Backbone.View.extend({
initialize : function(){
this.prepareCollection();
},
prepareCollection : function(collection){
_checker = function(){
if (collection.length === _done) {
this.render();
}
};
_.bind(_checker,this);
collection.each(function(item){
item.fetch(
success : function(){
//you can also initialize router here.
_checker();
}
);
});
},
rener : function(){
//make instance of View whichever you want and you can use colleciton just like variable
}
})
这是一个经常重复出现的问题,但答案很简单。
如果有帮助,也许我今天会画一些图。
我从来没有花时间正确地学习 UML,所以请原谅我。
1.问题
您目前拥有的是:
然而,问题是这不是很动态。
如果右侧的这 3 个函数需要从不同的 ajax 回调函数中执行,则需要将它们添加到这些回调中的任何一个。
想象一下,您想更改这 3 个函数中的任何一个的名称,这意味着您的代码会立即中断,并且您需要更新这些回调中的每一个。
你的问题表明你觉得你想避免每个函数单独执行异步调用,确实是这种情况,因为这会产生不必要的开销。
2。事件聚合
解决方案是实施事件驱动方法,其工作方式如下:
这种模式也称为pub/sub(或观察者模式),因为有发布事件的对象(在本例中为左侧)和订阅事件的对象(在右侧)。
使用此模式,您无需在 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" 来 un-subscribe。