jjzjj

javascript - ember.js - 从任何路由换出嵌套资源

coder 2024-07-26 原文

我有带有嵌套动态段的路由,例如 /:locale/products/:product_id/items/:item_id 等嵌套。我想在语言环境路由中的一个 Action 中换出语言环境。我不想在更改语言环境时转换到基本 /:locale 路由。

语言环境路由操作:

actions: {
  localeChanged: function(locale) {
    var route = this.controllerFor('application').get('currentRouteName');
    this.transitionTo(route, locale);
  }
}

这仅在嵌套不深时有效。我想避免在每条 route 实现 localeChanged 操作以提供给定路线所需的确切模型。

更新 1 - 肮脏的解决方案:

actions: {
  localeChanged: function(locale) {
    var routes = this.router.router.currentHandlerInfos;
    var models = [];
    for (var i = 0; i < routes.length; i++) {
      var params = routes[i].params;
      for (var param in params) {
        if (params.hasOwnProperty(param)) {
          models.push(param === 'locale' ? locale : params[param]);
        }
      }
    }

    var args = models.slice();
    var currentRouteName = this.controllerFor('application').get('currentRouteName');
    args.unshift(currentRouteName);
    this.transitionTo.apply(this, args);
  }
}

我说脏是因为遍历 this.router.router.currentHandlerInfos 似乎容易出错。有没有更好的办法?

最佳答案

您可以创建一个添加此操作的 baseRoute。然后你所有的路线都可以继承自这个基本路线。您只需编写一次代码,它会在所有路由中共享。例如。

App.BaseRoute = Ember.Route.extend({
   actions: {
    localeChanged: function(locale) {
     var routes = this.router.router.currentHandlerInfos;
     var models = [];
     for (var i = 0; i < routes.length; i++) {
      var params = routes[i].params;
      for (var param in params) {
        if (params.hasOwnProperty(param)) {
          models.push(param === 'locale' ? locale : params[param]);
        }
      }
     }  
     var args = models.slice();
     var currentRouteName =  this.controllerFor('application').get('currentRouteName');
     args.unshift(currentRouteName);
     this.transitionTo.apply(this, args);
    }
   }});


App.SomeRoute = BaseRoute.extend();

关于javascript - ember.js - 从任何路由换出嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710301/

有关javascript - ember.js - 从任何路由换出嵌套资源的更多相关文章

  1. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  2. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  3. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  4. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  5. ruby-on-rails - link_to 不显示任何 rails - 2

    我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article

  6. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  7. Ruby——嵌套类和子类是一回事吗? - 2

    下面例子中的Nested和Child有什么区别?是否只是同一事物的不同语法?classParentclassNested...endendclassChild 最佳答案 不,它们是不同的。嵌套:Computer之外的“Processor”类只能作为Computer::Processor访问。嵌套为内部类(namespace)提供上下文。对于ruby​​解释器Computer和Computer::Processor只是两个独立的类。classComputerclassProcessor#Tocreateanobjectforthisc

  8. ruby-on-rails - RSpec:避免使用允许接收的任何实例 - 2

    我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_

  9. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  10. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

随机推荐