在最新的 Ember 中,如何仅使用模型的 id/名称链接到路由,而不是在链接页面中提供其所有属性?

2024-01-04

从 Ember 1.0-pre2 转换到最新的 master 时我遇到了问题(43354a98 https://github.com/emberjs/ember.js/commit/43354a98a5e441095132b1407f3e1f4809326802)和新路由器,即——

如果我有一条仅加载一堆记录的名称和 ID 的路线,并尝试将每条记录链接到另一条应显示完整模型的路线,那么当我到达新路线时,永远不会加载新模型,名称和 ID 是唯一可用的属性。

示例代码:

App.Router.map(function() {
  this.route("index");
  this.resource("birds");
  this.resource("bird", {
    path: "/birds/:bird_id"
  });
});

App.BirdsController = Ember.ArrayController.extend({
  birds: [
    {
      name: "Pigeon",
      id: "b.15"
    }, {
      name: "Chicken",
      id: "b.133"
    }, {
      name: "Turkey",
      id: "b.126"
    }, {
      name: "Ostrich",
      id: "b.4"
    }, {
      name: "Barn Owl",
      id: "b.47"
    }
  ]
});

App.BirdRoute = Ember.Route.extend({
  model: function(params) {
    return App.Bird.find(params.bird_id);
  }
});

{{#each bird in birds}}
  <li>{{#linkTo "bird" bird}}{{bird.name}}{{/linkTo}}</li>
{{/each}}

其中 App.Bird.find() 运行一些 XHR 以从一组远程 API 构建 Ember.Object(不使用 ember-data)。仅在本示例中,鸟类列表被硬编码到控制器中,以简化问题;在我的实际应用程序中,该列表来自远程 API。

我看到的行为是,如果您从 /birds 开始并单击其中一个链接,路由器将转换为“bird”并且您到达 /#/birds/b.5,但 App.Bird.find() 是从未调用过,页面上唯一的数据是“name”和“id”。但是,如果您随后重新加载页面,它会调用 App.Bird.find() 并正确构建并显示模型。

是否有某种方法可以强制从 URL 中的 ID 进行反序列化,或者仅将 ID 传递给 linkTo 而不是它假定完整的对象?我有一个类似的实现,可以在旧路由器上正常工作。


似乎是model钩子App.BirdRoute使用导航时永远不会被调用{{#linkTo}}...也许这是因为使用{{#linkTo}}您正在将一个对象传递给来自birds路线和余烬认为你不需要打电话model因为它认为 id 已经被反序列化为对象。这似乎是有道理的,因为model当您重新加载页面时被调用。

我用的是setupController挂机呼叫你的App.Bird.find()方法并将结果传递到控制器中。这可以通过直接 URL 或通过{{#linkTo}}点击。如果由{{#linkTo}}帮助链接setupController the model参数将是bird对象通过{{#linkTo}}帮手。如果直接从 URL 调用,则返回值model钩子将被传递到setupController as the model范围。

这是一个 JSFiddle 示例 http://jsfiddle.net/cteegarden/TULVH/5/

具有可访问 URL 的示例 http://jsfiddle.net/cteegarden/TULVH/5/show/

App.BirdRoute = Ember.Route.extend({
  model: function(params) {
    return {id: params.bird_id};
  },
  setupController: function(controller, model) {
    var bird_model = App.BirdTest.find(model.id);
    controller.set("content", bird_model);
  }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在最新的 Ember 中,如何仅使用模型的 id/名称链接到路由,而不是在链接页面中提供其所有属性? 的相关文章

随机推荐

  • html5画布中的“擦除”

    我在 html5 canvas 中有一个涂鸦应用程序 我正在尝试找出实现橡皮擦控件的最佳方法 第一个冲动只是让橡皮擦绘制背景颜色 白色 但这是有问题的 因为如果用户将图像或另一层移动到他们之前擦除的位置 他们会在擦除的位置看到白色绘图 理想
  • FetchXml 中的左连接?

    如何使用 FetchXml 进行左连接 考虑一个简单的 SQL 查询 如下所示 select person name address city from person left join address on person addressi
  • QToolTip 中包含的变量不会自动更新

    我在 QLineEdit 上有一个 QToolTip 并且工具提示包含文本中的变量 工具提示代码包含在 init h 文件中 问题是工具提示中的变量值在程序运行中发生更改时不会自动更新 例如 我将鼠标悬停在行编辑上 值会显示在工具提示中 我
  • 在 JavaScript 中为属性添加别名

    我认为这很简单 有没有一种简单的方法来添加属性的辅助名称 我认为这是特定于字符串的 我不确定 即 c length this line pseudo code hello world length returns 11 hello worl
  • Scala Slick 2 加入多个字段?

    如何在多个字段上进行连接 如下例所示 val ownerId 1 val contactType 1 val contact for t c lt ContactTypes leftJoin Contacts on id typeId ow
  • XCode 4 与 Git/Github 无法提交图像

    源代码文件已提交 但图像未提交 错误信息 错误 pathscpec 与 git 已知的任何文件都不匹配 XCode 发行说明提到现在提交二进制文件存在问题 他们建议 在收到该错误后 您应该转到命令行并执行 git commit
  • JavaScript同步执行

    我是 javascript 新手 正在尝试使用滑块 我的问题类似于以下问题jquery attr 带回调 https stackoverflow com questions 4040712 jquery attr with callback
  • 在 Azure SQL DB 中启用和配置 FILESTREAM

    如何在 AZURE SQL DB 中存储 PDF 文件 上述要求我在 Azure SQL DB 上启用和配置 FILESTREAM 目前 当我运行创建表查询时出现此错误 Msg 40517 Level 16 State 1 Line 28
  • 数据列表分页?

    我有一个包含动态内容的数据列表 我需要启用对此数据列表的分页 我在 Visual Studion 2010 下使用 asp net c 请向我发送如何启用对数据列表分页的代码 这是数据列表的代码
  • 第一次偶然异常发生在 XMLSerializer 的构造函数中[重复]

    这个问题在这里已经有答案了 可能的重复 XmlSerializer 在构造函数中给出 FileNotFoundException https stackoverflow com questions 1127431 xmlserializer
  • Github - 分叉一个私人仓库

    我已被添加到一个拥有一些私有存储库的组织 我需要向他们发送包含一些更改的拉取请求 但我不知道是否可以 我在 GitHub 上没有付费帐户 那么如何分叉该私有存储库来修改和发送拉取请求 正如 如果我将其他人的私人 Github 存储库分叉到我
  • “VkVertexInputBindingDescription”中“绑定”的目的是什么?

    https www khronos org registry vulkan specs 1 0 man html VkVertexInputBindingDescription html https www khronos org regi
  • 记录 WCF 消息大小

    我正在使用 WCF 通过网络发送一些 Linq 对象 我想使用消息日志记录或跟踪来记录消息大小 然而我不想 或者没有能力使用配置文件来设置它 我正在努力弄清楚如何以编程方式执行此操作 我不在乎这是否发生在客户端主机上 我控制两者 有人有这样
  • Perl Cwd::cwd 和 Cwd::getcwd 函数有何不同?

    问题 有什么区别Cwd cwd and Cwd getcwd一般来说 在 Perl 中 不考虑任何特定平台 为什么 Perl 两者兼而有之 预期用途是什么 在什么场景下应该使用哪一种 我们将不胜感激示例用例 这重要吗 假设我不混合它们 选择
  • 安全 Rust 中可能存在未定义行为吗?

    有没有什么方法可以在不使用 Rust 的情况下实现未定义的行为unsafe 当然 此类行为可以由第三方库包装在 安全 函数中 因此我们假设我们仅使用标准函数 绝对可以 但是任何此类情况都是 Rust 或标准库的错误 https github
  • 如何获取列表中列表的索引?

    list word1 word2 word3 print list index word1 这很好用 但我如何获得这个的索引 list word1 word2 word3 word4 word5 word6 print list index
  • 重新启动auditd服务会出现依赖错误

    我正在尝试为 docker 守护进程配置审核 如下所示 将下面的行添加到 etc audit audit rules file w usr bin dockerd k docker 然后 使用以下命令重新启动审核守护程序 service a
  • 使用 IB 调整大小构建自定义 UITableViewCell?

    我已确保单元格的自动调整大小蒙版允许灵活的宽度 但当设备旋转时 单元格的大小不会调整 我还验证了表格视图已调整大小 问题直接出在单元格上 这是我用来创建单元格的代码 if cell nil Load the top level object
  • 带系统函数的 C 程序中的大括号扩展

    我尝试了命令 cat tmp file 1 3 gt newFile 并且工作完美 但是当我编译并执行以下c程序时 include
  • 在最新的 Ember 中,如何仅使用模型的 id/名称链接到路由,而不是在链接页面中提供其所有属性?

    从 Ember 1 0 pre2 转换到最新的 master 时我遇到了问题 43354a98 https github com emberjs ember js commit 43354a98a5e441095132b1407f3e1f4