gpt4 book ai didi

javascript - 如何在 Backbone.js 的 Router.routes 中绑定(bind)外部方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:26:54 26 4
gpt4 key购买 nike

是否可以从 Router.routes 映射中的其他对象绑定(bind)方法?

我在 Views 中拥有所有“逻辑代码”,我想避免在 Router 中定义方法。

例如,我有这个:

var app = new (Backbone.View.extend({    
playHome: function(){
// logic code here
}
//..........
});
var router = new (Backbone.Router.extend({
routes: {
"play" : 'playHome'
},
playHome: function(){
app.playHome();
}

我想做这样的事情:

var router = new (Backbone.Router.extend({
routes: {
"play" : 'app.playHome'
},

提前致谢

最佳答案

这里有一个相当简单的方法来完成你想要的:

  var WorkspaceRouter = Backbone.Router.extend({
routes: {
"help": "help", // #help
"search/:query": "search", // #search/kiwis
"search/:query/p:page": "search" // #search/kiwis/p7
},

help : function () { },

search : function () { }
});

var App = {
help: function() { console.log("help"); },

search: function(query, page) { console.log("search", query, page); }
};

$(document).ready(
function () {
var router = new WorkspaceRouter();
Backbone.history.start();

router.on("route:help", App.help);
router.on("route:search", App.search);
}
);

此解决方案依赖于这样一个事实,即 Backbone 会为每个路由触发一个事件,并在路由器本身上调用一个函数。如果您愿意允许路由器上的虚拟函数不执行任何操作,那么您可以将任何您喜欢的东西附加到路由器的事件上,并在其他对象上调用任意数量的其他函数,根据需要附加整个事物(或分离它)。

关于javascript - 如何在 Backbone.js 的 Router.routes 中绑定(bind)外部方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10517705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com