0

Ember.js で、1 対多の関係を持つモデルがある場合、親モデルのプロパティに基づいてリンクを生成することは可能ですか?

たとえば、次のようなモデルといくつかのデータがあります。

var SuggestionGroup = Ember.Model.extend({
   id: Ember.attr('number'),
   name: Ember.attr('string'),
   suggestions: Ember.hasMany('App.Suggestion', {
      key: 'suggestions',
      embedded: true
   })
});

SuggestionGroup.adapter = Ember.FixtureAdapter.create();

SuggestionGroup.FIXTURES = [
{
    id: 1,
    name: 'Start',
    suggestions: [
        {
            id: 1,
            title: 'Fetching coffee and cake for the Interface Developers',
            description: 'Because they\'re so brilliant',
            upVotes: 10,
            downVotes: 2
        },
        {
            id: 2,
            title: 'Criticising the app devs more',
            description: 'They enjoy a bit of banter',
            upVotes: 8,
            downVotes: 4
        },
        {
            id: 3,
            title: 'Not updating JIRA',
            description: 'It\'ll be funny when the PMs start raging',
            upVotes: 1000000,
            downVotes: 0
        }
    ]
}]

そして、ここに私のルートがあります:

App.Router.map(function() {
   this.resource('current-suggestions');
   this.resource('suggestion', {
      path: '/current-suggestions/:suggestion_id'
   });
});

私のテンプレートは次のようなものです:

{{#each model}}
<td>
    <ul>
    {{#each suggestions}}
        <li class="suggestion">
            <h3>
                {{#linkTo 'suggestion' this}}{{title}}{{/linkTo}}
            </h3>
        </li>
    {{/each}}
    </ul>
</td>
{{/each}}

だから、現時点で私のパスはcurrent-suggestions/1. しかし、私がやりたいのは、のようなパスを持つことですcurrent-suggestions/Start/1。したがって、パスは親モデルのプロパティを使用して生成されます。

このようなことは可能ですか?

4

1 に答える 1

1

@GJK からの最後のコメントは、すでに正しい方向を指していましたが、あなたの質問に対するやや手の込んだ回答を提案させてください。

serializeこれを行う 1 つの方法は、の関数にフックし、SuggestionRoute最終的な URL に必要な不足している動的セグメントを提供することです。概念的には、次のようになります。

あなたの場合、追加の動的セグメントをルート定義に追加します:name

App.Router.map(function() {
  this.resource('current-suggestions');
  this.resource('suggestion', {
    path: '/current-suggestions/:name/:suggestion_id'
 });
});

次に、次のように動的セグメントのデータを提供します。

App.SuggestionRoute = Ember.Route.extend({
  ...
  serialize: function(model) {
    var id = model.get('id');
    var name = model.get('name');
    return {
        name: name, suggestion_id: id
    }
  }
});

注:nameこのソリューションは、モデルの親モデルからプロパティを提供することを前提としています。Suggestionこれを実現するには、モデルの関係を再考することができます。

また、目標を達成するためにアプリをリファクタリングする方法 (URL のようなもの/current-suggestions/Start/1など) については、こちらをご覧ください。

デモ

私はあなたのユースケースをシミュレートしようとしましたが、別のアプローチで.

お役に立てば幸いです。

于 2013-07-18T22:15:23.437 に答える