在Ember中在动态路由上使用非持久记录的正确方法是什么

时间:2017-09-03 04:41:18

标签: javascript ember.js

我想做什么: 创建一条记录而不是保留它,因为所需的一些信息将在下一条路线上填写。

我是怎么做到的? 我正在生成一个uuid,并将其分配给记录。然后转换到新路线。

createOrder() {
      var d = new Date().getTime();
      var uuid = 'xxxxyyyxxxxxxxxyyxyxxxyyy'.replace(/[xy]/g, function(c){
        var r = (d + Math.random() * 16) % 16 | 0;
        d = Math.floor(d / 16);
        return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16);
      });
      console.log(uuid)
      this.get('model.event.orders').addObject(this.store.createRecord('order', {id:uuid}));

 this.transitionToRoute('orders.list.new', uuid);

问题: 该网址符合预期/orders/<order:id>/new但是, 在转换模型时,尝试从404中返回的服务器获取数据,而不是使用存在记录的本地存储或内存。

我想要的是什么?: 如何使其使用本地存储,以免导致错误。

2 个答案:

答案 0 :(得分:1)

正如勒克斯在评论中写道,通过该模型将解决您的问题。原因很简单:如果在transitionToRoute函数中给出模型作为参数,Ember将使用该模型而不是从后端获取模型(通过调用model hook)。

来自文档:

  

可选择为相关路线提供模型。该模型将使用路径的序列化挂钩序列化到URL中。

     

如果传递了文字(例如数字或字符串),则会将其视为标识符。在这种情况下,将触发路由的model hook

答案 1 :(得分:0)

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    return this.get('store').peekRecord('order', params.id);
  }
});

这也是确保不会触发ajax请求的一种方式。 它将直接向ember商店提出请求。