gpt4 book ai didi

backbone.js - 多条匹配路线

转载 作者:行者123 更新时间:2023-12-04 00:32:38 25 4
gpt4 key购买 nike

我有一个定义两个 Controller 的主干.js 应用程序,并且两个 Controller 都定义了与 location.hash 匹配的路由模式。我很难让他们俩都开火-例如

ManagerController = Backbone.Controller.extend({
routes: {
":name": "doStuff"
},

doStuff : function(name) {
console.log("doStuff called...");
}
});

Component1Controller = Backbone.Controller.extend({
routes: {
"xyz123": "doMoreStuff"
},

doMoreStuff : function() {
console.log("doMoreStuff called...");
}
});

因此,如果 url 是“http://mysite.com/#xyz123”,那么我会看到调用了“doStuff()”,或者如果我注释掉了该路由,那么会调用“doMoreStuff()”。但不是两者兼而有之。

我使用这种架构是因为我的页面是高度面向组件的,并且每个组件都定义了自己的 Controller。 “组件管理器”还定义了一个 Controller ,它对所有路由进行一些内部维护。

我应该能够配置两个都响应同一路由的 Controller 吗?干杯,

科林

最佳答案

简短的回答:不,你不能那样做。每页一个 Controller 。

长答案:当您实例化一个新 Controller 时,它会将其路由添加到历史单例中。 History 单例正在监视 URL 的哈希组件,当哈希更改时,它会扫描路由以查找与其需要匹配的第一个表达式。然后它触发与该路由关联的函数(该函数已绑定(bind)到声明它的 Controller )。它只会触发一次,如果发生冲突,它的触发顺序在形式上是不确定的。 (实际上它可能是确定性的。)

哲学答案: Controller 是一个“ View ”对象,它会根据 URL 的哈希组件影响整个页面的呈现。它的目的是提供用户将来可以访问的具有书签功能的 URL,以便当他访问一个 URL 时,他可以从许多预先选择的 View 中开始。根据您的描述,听起来您正在操纵这个公开暴露的、可手动寻址的项目来操纵视口(viewport)的不同部分,同时不理会其他部分。这不是它的工作原理。

Backbone 的优点之一是,如果您向它传递一个已经是正则表达式的路由,它将按原样使用它。因此,如果您尝试使用 Controller 创建布局的可书签描述(显示模式“A”中右上角的组件 1,显示模式“B”中左上角的组件 2,等等)我可以建议一些替代方案——在 URL 的散列部分为每一个分配一个命名空间,并创建忽略其余部分的路由,即

routes: {
new RegExp('^([^\/]*)/.*$'): 'doComponent1stuff',
new RegExp('^[^\/]*/([^\/]*)\/.*$': 'doComponent2stuff',
}

看看第一个如何只使用第一个斜线之后的项目,第二个斜线之后的第二个,等等。你可以完全按照你想要的方式编码你的魔法。

不过,我建议,如果您要对组件的外观和感觉做一些事情,并且希望它具有合理的持久性,那么您可以查看从某个本地商店获取和设置其 cookie 的 View ;如果它们足够小, cookies 就足够了。

关于backbone.js - 多条匹配路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5223251/

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