0

在基于 CLI 的 Ember 应用程序中,使用 cli-api-stub 提供静态测试 JSON,我有一个 Routesearch操作,用于获取和设置酒店预订 JSON 数据controller.model。View 使用 循环项目{{#each item in model itemController="reservations/-item"}},并且预订项目通过 传递给“modifyReservation”操作{{action "modifyReservation" item}}。然后,此操作将预订传递到this.transitionTo('find-booking.summary', reservation)预订 ID 应显示为动态段的位置,但我得到undefined了它(../find-booking/undefined)。

JSON:

"ResGlobalInfo": {
  "HotelReservationIDs": {
    "HotelReservationID": [
      {
        "@ResID_Value": "HG34A2"

在 ../app/router.js 中:

this.route('summary', {path: "/:ResGlobalInfo.HotelReservationIDs.HotelReservationID.firstObject.@ResID_Value"}, function(){

在操作函数中,我可以用 来控制 ID (reservation.ResGlobalInfo.HotelReservationIDs.HotelReservationID[0]['@ResID_Value']),但是(reservation.ResGlobalInfo.HotelReservationIDs.HotelReservationID.firstObject.@ResID_Value)我得到一个 broccoli build 错误。好像不太@喜欢 当然,使用这个访问器/路径作为动态段路径,我也得到了undefined. 我已经尝试了一些语法变体,但它们都不起作用。

如何编码我的路由器路径动态段,以便它从传递给路由的 JSON 对象中提取保留 ID 'attrib'?

4

2 回答 2

0

路由的路径定义不应该具有与您的 JSON 相对应的路径。你应该使用类似的东西:

this.route('summary', {path: "/:reservation_id" });

然后在您路线的模型挂钩中:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params, transition) {
    // Your code to return the model
    // Sounds something like the following:
    var data = this.controllerFor('search').get('model').findBy('crazy_path', params.reservation_id);
    return ???
  }
)};

但是你的问题感觉很...... un-Ember-y。这个感觉不优雅,Ember 很优雅。

于 2015-04-15T17:15:06.650 回答
0

感谢您的建议。该应用程序基于大约一年前的 EAK 约定,在升级和迁移时,我一直在修改一些已弃用的做法。

关于我关于 transitionTo 和 setupController 的问题,似乎试图从动态段中的模型/对象访问 ID 的开发人员必须一直在试验,因为我认为这不受支持。虽然我无法找到一个优雅的解决方案,但您提到的模型钩子为我指出了一种解决方法。

在切换到仅将 ID 传递到“transitionTo”之后,我遇到了目标路由/控制器/视图没有他们需要的模型数据的问题。如果我查找目标路由并设置它的模型(使用我的保留对象),那么当我转换到它时,我会从路由反序列化钩子中得到“this.model is not a function”(因为此操作需要对对象进行序列化,这在这种情况下不是这样,我不知道如何以这种方式传递它)。在尝试了我能找到或想到的语法的每一个变体数小时后,我想出了一个解决方法,我在目标路由中添加了一个“proxyModel”属性,我在原始路由中查找并设置了该属性。然后在目标路由模型挂钩中,我返回“this.proxyModel”。有了这个,目标路由和控制器就有了他们需要的模型数据,路由器动态段中“未定义”ID的问题就消失了。因此,此解决方法适用于“查找预订”和“查找预订”路线,并且对“新书”路线没有负面影响,所有这些都转换为“摘要”视图(但通过不同的路线和控制器) .

我们还没有将 api-stub 测试 json(现在是 cli-api-stub)转换为真正的 web 服务和 REST API,所以不知道当我们这样做时我们必须在多大程度上重新处理模型处理。当这个应用程序完成时,Ember Data 处于测试阶段,但我相信当我们切换到真正的数据服务时,我们会考虑利用它。

于 2015-04-16T17:29:03.757 回答