1

直接访问可以正常工作,但是由于 Ember 之前在 Select 路由中所做的查询/documents/new/1,来自记录的访问已经可用。/documents/select

路线

this.resource('documents', function() {
  this.route('new', { path: '/new/:document_id' });
  this.route('show', { path: '/:document_id' });
  this.route('select');
});

路线

App.DocumentsSelectRoute = Ember.Route.extend({
  model: function() {
    return App.Document.find({public: true});
  }
});

App.DocumentsNewRoute = Ember.Route.extend({
    model: function (params) {
      console.log('New Model')
      var originalDoc = App.Document.find(params.document_id),
          newDoc = App.Document.createRecord();
          originalDoc.one('didLoad', function () {
               newDoc.setProperties(this.serialize());
          });
          return newDoc;
    }
});

model从 Select 路线来时永远不会被调用,因为record已经在那里加载了。我找到了一些关于这种行为的信息,但这对我的情况没有帮助https://stackoverflow.com/a/14591851/555240

更新:
模板

应用程序.handlebars

<li>{{#linkTo "documents.select"}}New{{/linkTo}}</li>

select.handlebars

<ul>
{{#each doc in controller}}
  <li>
    {{#linkTo "documents.new" doc}}<div class="cover"></div>{{/linkTo}}
    {{#linkTo "documents.new" doc}}{{doc.title}}{{/linkTo}}
  </li>
{{/each}}
</ul>

新的.handlebars

{{ model }}
{{#if model.slug }}
  {{ view App.DocumentView templateNameBinding="model.slug" class="document portrait" }}
{{ else }}
  Loading...
{{/if}}

{{ model }}在转换到时new.handlebars显示<App.Document:ember340:1>,但<App.Document:ember304:null>在直接导航到时显示。

4

1 回答 1

1

首先,在您的资源定义中,您有:

this.route('new', { path: '/new/:document_id' });

这意味着您在新文档的 url 中有一个动态段,因此 Ember 期望当您访问 url /document/new/1 时,您将使用 id 为 1 的Document。默认行为是检索 id 为 1 的Document并使其可用作模型。

通常使用 RESTful 结构,您将拥有像/document/new这样的静态 url,它将创建一个新Document而不是查找现有的 Document。

但是,如果您确定要使用代码 DocumentsNewRoute.model 函数,那么我建议您更改 select.handlebars 文件中的链接。

在您的 select.handlebars 文件中,您有:

{{#linkTo "documents.new" doc}}

这意味着它将通过doc对象作为 DocumentsNewRoute 路由的上下文。如果您将其更改为:

{{#linkTo "documents.new"}}

那么它将没有上下文,因此它将在DocumentsNewRoute路由上执行模型函数。但是参数中不会有 id 来查找模型。所以你可以改变你的代码来简单地创建一条新记录

ps:您确定需要从数据库中检索该路由的Document吗?

于 2013-02-11T16:14:47.687 回答