Backbone.Marionette 在路由更改时更改区域

2024-04-22

我的应用程序有一个主区域,有时主区域中会有一些应可通过 URL 访问的子区域。主要区域内容由应用程序路由器的功能更改,因为他知道主要区域。但是子视图中的临时区域呢?

例如网址/docs将显示文档链接列表以及/doc/:id应在列表旁边显示文档的内容。那么怎样才能/doc/:id例如,当有人单击列表时可以呈现内容,并且当有人在新选项卡中打开网址时可以呈现列表和内容。

据我所知,有两个选项,每个区域都有一个路由器,或者区域管理器触发带有应该更改的路线和区域的事件。有关解决此问题的最佳方法的任何提示。


好吧,我想出了一个适用于每个区域的路由器解决方案。可以通过路线图和视图轻松配置路由器。当路线匹配时,最初通过的区域将显示视图的新实例。

Here https://gist.github.com/eskimoblood/4995526是路由器的高级版本,其中路由参数将传递到视图中。

Update

仅当每条路线仅注册一次时,上述解决方案才有效。如果您第二次注册相同的路由,则第一次的回调将被覆盖。所以我想出了一个解决方案,区域控制器不直接在路由器上注册路由,而是监听route:change全局事件总线(Marionette.Application.vent)上的事件,并且路由器触发route:change此事件总线上的事件。

路由器控制器:

// The problem with backbone router is that it can only register one function per route
// to overcome this problem every module can register routes on the RouterController
// the router will just trigger an event on the `app.vent` event bus when ever a registered routes match
define(function() {

  function RouterController(vent) {
    this.vent = vent;
    this.router = new Backbone.Router();
  }

  RouterController.prototype = _.extend({
      //just pass the route that change you wanna listen to
      addRoutes: function(routes) {
        _.each(routes, function(route) {
          this.router.route(
            route,
            _.uniqueId('e'),
            //create a closure of vent.trigger, so when ever the route match it simply trigger an event passing the route
//            _.partial(_.bind(this.vent.trigger, this.vent), 'route:change', route)
            _.bind(function() {
              this.vent.trigger.apply(this.vent, ['route:change', route].concat(_.toArray(arguments)));
            }, this)
          );
        }, this);

      }
    },
    Backbone.Events);

  return RouterController;
});

区域路由器:

define(['common/App'], function(app) {

    function RegionRouter(region, routerSettings) {
      app.router.addRoutes(_.keys(routerSettings));

      this.listenTo(app.vent, 'route:change', function() {
        var route = arguments[0];
        var View = routerSettings[route];

        if (!View) {
          return;
        }

        var params;

        if (arguments.length > 1) {
          params = computeParams(arguments, route);
        }
        region.show(new View(params));
      });
    }

    RegionRouter.prototype = _.extend(
      {
        onClose: function() {
          this.stopListening(app.vent);
        }
      }, Backbone.Events
    );

    function computeParams(args, route) {
      args = Array.prototype.slice.call(args, 1);

      //map the route params to the name in route so /someroute/:somevalue will become {somevalue: passedArgs}
      //this object will be passed under the parameter key of the options
      var params = {};
      var regEx = /(?::)(\w+)/g;
      var match = regEx.exec(route);
      var count = 0;
      while (match) {
        params[match[1]] = args[count++];
        match = regEx.exec(route);
      }

      return {params: params};
    }

    return RegionRouter;
  }
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Backbone.Marionette 在路由更改时更改区域 的相关文章

  • Backbone.js 和 Rails - 如何处理来自 Backbone 模型的参数?

    在标准 Rails 控制器中 我将创建如下记录 user User new params user 这假设传入的表单参数是嵌套的 我一直在使用 Backbone js 我注意到默认情况下 Backbone 不会像普通 Rails 表单那样嵌
  • Javascript MVC 框架的目的[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想知道 Javascript MVC 框架 例如 Backbone js 和 Spine js 的用途 作为一名热心 经验丰富的 Ruby o
  • 如何使用主干单页应用程序在 MVC4 中测试 AntiForgeryToken

    我在获取 Microsoft 的 MVC 时遇到问题 ValidateAntiForgeryToken 使用使用 Marionette Backbone 编写的单页应用程序 SPA 问题似乎是MVC ValidateAntiForgeryT
  • 将 HAML 模板与 Backbone.js 结合使用的最佳策略

    我进入 Backbone js 来为我的项目构建 javascript 代码 我喜欢 HAML 在后端 rails 上进行模板化 所以我想将它用于 Backbone 视图模板化 我知道 Javascript 有几个 HAML 端口 例如ht
  • 扩展 Backbone.Collection 原型

    继从这个问题 https stackoverflow com questions 10219182 retrieve element from backbone collection removen 我正在尝试使用一些自定义方法来增强 Ba
  • Apache和Nodejs跨域ajax问题

    我正在开发一个应用程序 其中我使用了托管在同一台机器上的两台服务器 其中一台是 apache 它将作为基本主机来服务 php 页面 另一台 Nodejs 用于其余 api 的通信 整个应用程序构建在backbone marionette r
  • 未捕获的类型错误:无法调用 null 的方法“替换”

    如果我在 Chrome JS 控制台上输入 template pranks list html 它也可以工作 gt gt template pranks list html function a return e call this a b
  • 骨干木偶区域显示无渲染

    是否可以将已渲染的视图放入骨干牵线木偶区域而无需再次渲染 例如 region show myView This will call render on myView 我不希望该区域再次呈现我的视图 If I do region attach
  • 重新渲染子视图后,主干事件会多次触发

    我们有一个由侧边栏和几个子视图组成的主干视图 为简单起见 我们决定让侧边栏和子视图由单个视图管理render功能 但是 那click edit单击侧边栏项目之一后 事件似乎会多次触发 例如 如果我从 常规 开始并单击 edit then h
  • Rails:backbone-on-rails gem-

    尝试按照 Ryan Bates Backbone js 教程构建抽奖应用程序 但我已经遇到了第一部分代码的问题 在 application js 的 init 函数中 他初始化了 Raffler 路线的新实例 该实例应该触发警报 主页 但我
  • Marionette.Renderer、Underscore 模板和 i18next 国际化

    我们目前需要使用 Backbone Marionette 和下划线模板向中型应用程序添加国际化 经过一番彻底的研究后 出现了两种有效的选择 下属18n https github com ggozad underi18n它提供与下划线的直接集
  • 依赖注入与托管依赖关系与全局对象

    我正在 Javascript BackboneJS 一个 MVC 框架 RequireJS 框架中工作 但这个问题有点 OO 通用 首先让我解释一下 在 Backbone 中 您的视图是传统视图和控制器的混合 而您的 HTML 模板是传统的
  • 使用主干渲染引导模式

    我认为代码可以更好地解释我的问题 风景 App Views ErrorModal Backbone View extend template window template errorModal render function this e
  • 在backbone.js 中缓存集合?

    确保我的集合保持缓存并仅获取一次的最佳方法是什么 我应该实现某种缓存层吗 我应该分享Collection变量到需要的地方 我可以信任 jQuery 的 AJAX 设置吗 ajaxSetup cache true 现在看起来的基本集合 the
  • 使用 Rivets.js 迭代 Backbone.js 模型的集合?

    我在用着铆钉 js http rivetsjs com 对于 Backbone 项目中的两个双向数据绑定 并且希望实现迭代绑定 文档表明迭代绑定是可能的 但没有可用的示例 我正在使用一个简单的 Rails API 将 JSON 发送到客户端
  • Marionette.View 中 UI 元素的可用性

    我只是想了解 Backbone Marionette 关于 UI 元素的观点背后的决定 在现有 DOM 元素上实例化 Marionette View 时 如下所示 view new Marionette ItemView el elemen
  • backbone.js - 如何在视图之间进行通信?

    我有一个带有多个backbone js 视图的单页Web 应用程序 观点有时必须相互沟通 两个例子 当有两种方式视图同时以不同方式呈现集合时 并且对一个视图中的项目的点击必须转发到另一个视图 当用户转换到流程的下一个阶段时 第一个视图将数据
  • 如何从 Backbone 集合中提取多个属性?

    我试图从 Backbone 集合中提取多个属性 但它返回undefined 收藏 id 1 name raju age 23 sex male hobbies id 2 name ramesh age 43 sex male hobbies
  • 获取集合时的 ​​Backbone.js 进度条

    我想在用新内容更新应用程序时显示进度条 我想最好的办法是在集合上调用 fetch 时执行此操作 我获取的内容主要是图像 视频海报等 但我只获取链接 而不是 base64 字符串或大的东西 我想做的是在获取图像链接时用进度条覆盖屏幕 渲染视图
  • Backbone Marionette CompositeView 排序列表 - 在添加时呈现额外的模型

    这是小提琴 http jsfiddle net QhQ8D 10 http jsfiddle net QhQ8D 10 代码在下面 制作一个聊天应用程序 需要一个排序的 连接的用户列表 名称上带有比较器的图形集合连接到 CompositeV

随机推荐

  • Like子句和sql注入

    我对这种情况存有疑问 我在存储过程中有这样的查询 SELECT column1 column2 FROM table1 WHERE column1 like column1 我的问题是 这容易受到 SQL 注入攻击吗 我需要将其更改为这样的
  • 如何在PDF文档之前显示加载屏幕

    在我们的应用程序中 我们有动态生成的 PDF 文档的链接 链接看起来像这样主机 22 5 file 3136 pdf所以对于浏览器来说它就像一个静态的 pdf 文档 单击链接时 它会打开一个新窗口 该窗口仅接收 PDF 文档 无 HTML
  • 仅使用本机库的 C# 简单游戏

    我可以找到一组java 2D 游戏教程 http zetcode com tutorials javagamestutorial and 安卓游戏教程 http obviam net index php table of contents
  • 计算数组中向量之间的最大距离

    假设我们有一个包含 n 个向量的数组 我们想要计算这些向量之间的最大欧氏距离 最简单 天真的 的方法是迭代数组 并为每个向量计算其与所有后续向量的距离 然后找到最大值 然而 这个算法会增长 n 1 相对于数组的大小 对于这个问题还有其他更有
  • 继续阅读 JavaScript 中的链接

    我有一个像传记这样的字段 其中包含文本 我需要在第一页上显示该字段的一半 部分 文本 然后出现继续阅读链接 单击该链接后 剩余文本将显示在同一页面上 我需要在 HTML 中实现这一点 谁能帮我 请注意 这是快速原型设计 如果你使用jquer
  • 可以在 iOS 6 中显示“App Store 模式”吗?

    是否可以在 iOS 6 中显示一个模式视图控制器来在 App Store 中展示我的应用程序 是的你可以 iOS6 看一眼SKStoreProductViewController https developer apple com libr
  • 如何在 Laravel 7.x 中从控制器返回视图时传递 cookie?

    在 laravel 7 x 中 有什么方法可以在返回视图时将 cookie 传递给客户端吗 类似于 return view welcome gt cookie name value min 嗯 我做了一些研究 发现有一些方法 我熟悉的两个是
  • 当给定闪光角度和速度时,计算物体的轨迹

    我正在尝试从大炮中发射炮弹并使其遵循现实的路径 射击角度根据大炮的方向而变化 自动定向到鼠标指针 所以我想弄清楚的是 当给定角度和设定速度时 如何沿着抛物线路径移动炮弹 我读到 这可以在没有复杂的三角学的情况下完成 在高中时从未听过 并且可
  • Rails 3 ActiveRecord API:.build 方法

    我对 Ruby RoR 相当陌生 一年多了 我注意到 RoR 或 Ruby 内部有几种不同的方法基本上做同样的事情 我想要得到某种澄清的一种方法是 build方法 什么时候使用它是有效的 或者如何以最好的方式使用它 算是一回事 Thanks
  • 使用 JQuery css 方法自定义 CSS 光标

    有没有办法使用 JQuery 的 css 方法来提供以下光标样式 cursor url http www google com intl en ALL mapfiles closedhand cur default important jQ
  • 使用 pg-promise 查询多对多关系的最佳方法

    例如 我想从数据库获取用户信息 电子邮件及其角色 并创建一个如下对象 id 1 firstname John lastname Johnny emails type work email email protected cdn cgi l
  • 使用forever运行meteor生成的节点包的正确语法是什么?

    在文档中 在您自己的服务器上运行meteor的过程是运行 meteor bundle bundle tgz 然后提取这个 tarball tar xzvf bundle tgz 然后启动一个节点服务器 MONGO URL mongodb l
  • YouTube API v3 示例项目引发 GTLJSONRPCErrorDomain -32602 错误请求错误

    我刚刚下载了Google API 目标 C 客户端 https code google com p google api objectivec client source checkout 我在 Mac 上的 Xcode 中打开了 YouT
  • 如何在没有标志的情况下使用 ngx-bootstrap 角度折叠

    我正在尝试制作折叠动画 但没有布尔指示器isCollapsed 因为我有很多元素 并且我不想创建很多布尔值 所以有没有办法在没有布尔指示器的情况下做到这一点
  • 根据属性动态注册Spring Bean

    我正在使用最新的 Spring Boot 版本 并尝试根据中定义的内容动态创建 n 个 beanapplication yaml文件 然后我想根据 bean 名称将这些 bean 注入到其他类中 下面的代码是我想要实现的目标的一个非常简化的
  • JSpinner 编辑器区域设置

    我正在创建 JSpinner 并设置具有自定义格式的 NumberEditor 但无论我做什么 格式都使用 而不是 不根据我的语言环境 pt BR priceSpinner new JSpinner priceSpinner setEdit
  • ASP.NET UpdatePanel 错误 htmlfile:未知的运行时错误,updatePanelElement.innerHTML=rendering

    在触发 UpdatePanel 后调试 ASP NET Web 应用程序时 我收到此错误 htmlfile 未知的运行时错误 并且 updatePanelElement innerHTML rendering 在 ScriptResourc
  • 多用户聊天中的 smack 存在侦听器

    多用户聊天中的smack状态监听器没有被调用 使用Smack Api登录然后添加名册 addRosterListener mRoasterListener 但当聊天室其他用户的存在发生变化时 无法成功收听 我尝试使用以下代码来使存在侦听器正
  • 在 Mathematica 中使用图形进行渐变填充

    我如何使用以下内容创建Rectangle in Graphics Using Polygon 你可以 Graphics EdgeForm Black Polygon 0 0 3 0 3 1 0 1 VertexColors gt White
  • Backbone.Marionette 在路由更改时更改区域

    我的应用程序有一个主区域 有时主区域中会有一些应可通过 URL 访问的子区域 主要区域内容由应用程序路由器的功能更改 因为他知道主要区域 但是子视图中的临时区域呢 例如网址 docs将显示文档链接列表以及 doc id应在列表旁边显示文档的