从“编辑”导航回“显示”后,URL 包含“未定义”而不是 id

2024-04-19

我读了Ember 应用程序结构 http://emberjs.com/guides/outlets指南,现在我尝试使用 ember.js 创建一个简单的单页应用程序。

我的主页显示了一个包含 Post 对象列表的侧边栏。当我单击列表项时,在侧边栏的右侧,我会显示所选项目的只读版本。该版本有一个“编辑”按钮,可以编辑该项目。编辑版本有一个“取消”链接,可切换回只读版本。

我一切正常,但是,当导航回只读版本时,地址栏中的 URL 未正确更新。当导航回我的只读版本时,我希望网址从“example.com/#posts/123/edit”更改为“example.com/#posts/123”,但我得到的是“example.com/” #帖子/未定义'。

我尝试在“取消”事件中调用transitionTo 时提供上下文,但这不起作用。

如何导航回只读状态,同时保持 URL 指向正确的帖子 (example.com/#posts/123)?

我的大部分代码与 ember 指南中的示例相同,我的路由器和“编辑”相关代码如下所示:

App.EditPostView = Em.View.extend({
  templateName: 'edit_post'
});

App.Post = DS.Model.extend({
  title: DS.attr('string'),
  body: DS.attr('string'),
  published: DS.attr('boolean')
});

App.Router = Em.Router.extend({
  enableLogging: true,
  location: 'hash',
  root: Em.Route.extend({
    index: Em.Route.extend({
      route: '/',
      redirectsTo: 'posts.index'
    })
  }),
  posts: Em.Route.extend({
  route: '/posts',  # example.com/#posts
  showPost: Em.Route.transitionTo('posts.show'),
  editPost: Em.Route.transitionTo('posts.edit'),
  index: Em.Route.extend({
    route: '/',
    connectOutlets: function(router) {
    router.get('applicationController').connectOutlet('posts', App.Post.find());
    }
  }),
  show: Em.Route.extend({
    route: '/:post_id', # example.com/#posts/123
    connectOutlets: function(router, post) {
    router.get('postsController').connectOutlet('post', post);
    }
  }),
  edit: Em.Route.extend({
    route: '/:post_id/edit', # example.com/#posts/123/edit
    connectOutlets: function(router, post) {
    router.get('postsController').connectOutlet({
      viewClass: App.EditPostView,
      controller: router.get('postController'),
      context: post
    });
    },
  }),
  cancel: function(router, event) {
    router.transitionTo('show'); # Expect this to use 'example.com/#posts/123' but instead it shows 'example.com/#posts/undefined'
  }
  })
});

# edit_post.handlebars:
  <form {{action save on="submit"}}>
  ...
  {{view Em.TextField valueBinding="title"}}
  {{view Em.TextArea valueBinding="body"}}
  ...
  <a {{action cancel}} class="btn">Cancel</a>
  </form>

你缺少上下文transitionTo来电。你应该有类似的东西:

showPost: function (router, event) {
  var post = event.context;
  Em.Route.transitionTo('posts.show', post);
},

editPost: function (router, event) {
  var post = event.context;
  Em.Route.transitionTo('posts.edit', post);
},
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从“编辑”导航回“显示”后,URL 包含“未定义”而不是 id 的相关文章

  • 在 Ember 2.0 中存储瞬态 UI 状态的位置

    Ember 2 0 竭尽全力让一切都成为组件 随着可路由组件的推出 控制器也可能会被淘汰 Context 然而 在构建用户界面时 我经常遇到一个问题 到目前为止我还没有令人满意的模式 用户界面状态 我在做什么 选择状态 当前焦点 某些树显示
  • Ember:如何使用 i18n lib 翻译占位符?

    See http jsfiddle net cyclomarc 36VS3 1 http jsfiddle net cyclomarc 36VS3 1 我正在使用 Ember i18n lib 进行翻译 如何在 Ember TextFiel
  • emberjs 对一条路线使用多个路径/url

    在 Ember 中我可以使用这个 App Router map function this route accomodations 因此 如果访问 accomodations 它将加载该视图 我还可以补充 App Router map fu
  • ember js 子视图和 didinsertelement 事件

    我正在写一个Ember View 它将树结构变成菜单 我需要递归 所以我在视图模板中使用的是 view helper 它递归地调用自身来构建嵌套 ul li 结构 我需要的是一个钩子来调用一些 jQuery 插件来将此结构转换为菜单 当我从
  • 与查询参数一起使用时,Ember .observe() 返回两次回调

    http jsbin com vowup 2 http jsbin com vowup 2 如果我单击更改为随机 程序将登录控制台两次 由于某些奇怪的原因 将修订变量设置为字符串时它可以正常工作 但对于数字或任何其他类型的变量会记录两次 将
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • 将 css 类添加到 Ember.js 中的

    如何将CSS类添加到特定路线上的body标签 我尝试使用body在车把模板中添加标签但不起作用 Update 经过一番谷歌搜索后 我找到了这个解决方案 不确定这是最好的方法 但它确实有效 App SomeRoute Em Route ext
  • 未捕获错误:找不到从“ui/app”loader.js 导入的模块“ember”:164

    我使用以下命令构建并提供我的 ember 应用程序 ember build ember serve 两者都按预期工作 然后我转到以下 localhost 4200 URL 查看应用程序 并在 javascript 控制台中看到以下错误 Un
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • Ember Data 中的类继承有很多关联

    我正在尝试让 Ember Data 使用与类继承的 hasMany 关联 Ember 代码示例 var Person DS Model extend name DS attr string animals DS hasMany Animal
  • 如何使用自定义助手(把手)实现嵌套的每个循环

    我正在尝试与 Ember js 和 Handlebar js 一起构建一个表 不幸的是 我陷入了如何构建由带有 valueBinding 的 Ember TextArea 组成的单元格的方式 这个想法如下 有一个领域模型项目 它有很多条目
  • Ember.js 数组作为模型的属性

    干杯 我有一些模型 它的一个属性是一个数组 但由于某些原因 我在服务器上使用 mongoDB 并且它是嵌入式模型和 ember data 的问题 我不能做这样的事情 App Foo DS Model extend numbers DS ha
  • Ember CLI 中的把手助手语法

    在这篇文章中 使用 Handlebars js 迭代基本的 for 循环 https stackoverflow com questions 11924452 handlebar js iterating over for basic lo
  • 从 Ember.Route 中访问参数的正确方法是什么?设置控制器?

    Ember Route model可以访问params变量 但是Ember Route setupController才不是 这对我来说很麻烦 因为我的路径有多个动态段 我需要在我的模板中使用它们 具体来说 我的路径如下所示 project
  • 围绕活动的 {{linkTo}} 创建一个
  • 最干净的获取方式是什么 li class active 对于以下 Ember 应用程序中的活动页面 索引 html app js App Ember Application create App Router map function th
  • Ember 数据保存方法,创建与更新

    我不明白 Ember 如何确定是否应该更新或创建记录 我认为它是基于 ID 或商店条目 但它似乎是其他东西 代码示例阐明了 this returns the user without making an api call currentUs
  • emberjs:在应用程序初始化()之后添加路由

    我在使用 emberjs 构建基于路由器的应用程序时遇到了以下问题 我的应用程序的结构简化如下 var App Em Application create App ApplicationController Em Controller ex
  • 如何使用 Ember CLI 在两个组件之间共享模板?

    我有两个组件 SpecialButtonComponent and SpecialButtonDerivativeComponent The SpecialButton组件自动使用位于以下位置的模板 app templates compon
  • Ember 数据 - 动态段和查询参数在一起?

    使用 Ember 1 8 0 和 Ember Data 1 0 0 beta 11 Ember 商店的findQuery 函数似乎无法处理动态段 或者至少我无法在任何地方的文档中找到它 例如 给定以下路线 MyApp Router map
  • Ember-cli 夹具加载

    我确信我错过了一些小而愚蠢的东西 但似乎无法加载我的装置 这是我有 应用程序 模型 todos js import DS from ember data var Todo DS Model extend title DS attr stri

随机推荐