我正在使用backbone.js作为应用程序的前端。其中一个导航规则与身份验证流程非常相似:如果有可用的某些信息,应用程序应仅呈现用户请求的视图。否则,应呈现另一个视图。可以通过查询服务器来确定信息是否可用。到目前为止我尝试了什么:
//Router table definition, etc...
var initialize = function(){
var appRouter = new AppRouter;
appRouter.on('route:somePage', withInfo(function(){
//render view for 'somePage'
}));
...
withInfo
功能如下:
function withInfo(f) {
$.ajax({
type: 'GET',
dataType: 'json',
url: '/path/to/info',
success: function (data, status, request) {
var info = $.parseJSON(request.responseText);
if (info){
f.call();
} else {
var defaultView = new DefaultView();
defaultView.render();
}
}
});
}
基本上,我要做的是使用默认行为定义更高阶函数。如果默认行为不适用,它应该调用另一个函数(在上面的代码中名为f
)。但这并不像预期的那样有效。实际作为参数传递的函数并不总是在第一段代码中声明的函数。
还有其他办法吗?
答案 0 :(得分:1)
这可能不是最好的“干”方式,但它可以工作,除了已经包含的Underscore库之外不需要任何Backbone插件。这使用_.wrap
函数,它将第一个函数包装在第二个函数中。
appRouter.on('route:somePage', _.wrap(function(){
#render view for some Page
}, withInfo));
对于withInfo
函数,唯一更改的行是条件:
function withInfo(f) {
$.ajax({
type: 'GET',
dataType: 'json',
url: '/path/to/info',
success: function (data, status, request) {
var info = $.parseJSON(request.responseText);
if (info){
f();
} else {
var defaultView = new DefaultView();
defaultView.render();
}
}
});
}