1

私は ember.js を初めて使用し、アプリケーションのルート/リソースを でセットアップしようとしていますがApp.Router.map、アプリがルートを定義するための最も効率的で DRY-est な方法を考え出すのに少し問題があります。ニーズ。

アプリケーションに入るときのデフォルト ルートとなるリソースが必要itemsです。ダイナミック セグメントによってフィルタリングされたアイテムのリストが表示されます。これは:bucket、定義済みのバケット名のセットの 1 つでなければなりません。すなわち#/items/foo、 または#/items/bar、ここでfoobarは有効な:bucket値です。

さらに、itemsルートでは という 2 番目のセグメントも許可するtag必要があります。このセグメントの後には、タグ名の URL セーフ バージョンである別の動的セグメントが続く必要があります#/items/tag/my-tag

以下を使用して、最初の部分が機能しています。

App.Router.map(function() {
   this.resource('items', {path: '/items/:bucket'}); 
});

tagただし、ルートのバージョンをそこに合わせる方法がわかりません。itemsリソース内にネストすることも、独自の最上位リソースとしてネストすることも試しましたが、どちらも機能しません。

4

1 に答える 1

2

次のようにルーターを構成できます。

App.Router.map(function() {
  this.resource('items', {path: '/items'}, function(){
    this.route('bucket', {path: '/:bucket'});
    this.route('tag', {path: '/tag/:tag'});
  });
});

これは、 のすべてItemの を表示し、 の#/itemsバケット#/items/bucketNameHereと のタグでフィルタリングします#/items/tag/tagNameHere

にすべての項目が表示されている場合ItemRoute:

App.ItemsRoute = Ember.Route.extend({
  model: function(){
      return this.store.find('item');
  }
});

ItemsBucketRoute次に、 andでフィルタリングを処理できますItemsTagRoute

App.ItemsBucketRoute = Ember.Route.extend({
  model: function(params){
    console.log("model fired");
    return this.modelFor('items').filterProperty('bucket', params.bucket);
  }
});

App.ItemsTagRoute = Ember.Route.extend({
  model: function(params){
    return this.modelFor('items').filterProperty('tag', params.tag);
  }
});

ofを使用してfilterPropertyarrayControllerリスト フィルタリングを実行することもできます

JSBin の例

于 2013-10-11T17:42:15.307 に答える