1

直接アクセス/documents/new/1は問題なく機能しますが、レコードから来る場合、/documents/selectEmber が 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;
    }
});

modelrecordすでにそこにロードされているため、選択ルートから来るときに呼び出されることはありません。この動作に関する情報をいくつか見つけましたが、私の状況には役立ちませんhttps://stackoverflow.com/a/14591851/555240

更新:
テンプレート

アプリケーション.ハンドルバー

<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>

新しいハンドルバー

{{ 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 のドキュメントを操作することを想定しています。デフォルトの動作は次のようになります。 ID 1のドキュメントを取得し、モデルとして使用できるようにします。

通常、RESTful な構造では、 /document/newのような静的な URL があり、既存の Document を検索する代わりに新しいDocumentを作成します。

ただし、コード DocumentsNewRoute.model 関数を使用することが確実な場合は、select.handlebars ファイル内のリンクを変更することをお勧めします。

select.handlebars ファイルには次のものがあります。

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

これは、DocumentsNewRoute ルートのコンテキストとしてdocオブジェクトを渡すことを意味します。これを次のように変更すると:

{{#linkTo "documents.new"}}

次に、コンテキストがないため、DocumentsNewRouteルートでモデル関数を実行します。ただし、モデルを検索するためのパラメーターには ID がありません。したがって、コードを変更して、新しいレコードを作成するだけです

ps:このルートのデータベースからドキュメントを取得する必要がありますか?

于 2013-02-11T16:14:47.687 に答える