2013-02-18 5 views
6

私は、私のemberルートでスラグ(私のモデルの属性)を使ってクリーナーURLを取得する方法を理解しようとしています。emberjsルートでスラッグを使用する

私は私のルートは次のように見えることたいと思います:

http://www.server.com/#/newsitems/newsitem-title-in-slug-format/1 

の代わりに:

http://www.server.com/#/newsitems/1/1 

あなたが見ることができるように、私はとのNewsItemのIDを交換したいのですが実際のスラッグ属性。スラグプロパティは、この形式できれいなテキスト属性を受け取る

App.Newsitem = DS.Model.extend({ 
    slug: DS.attr('string'), 
    title: DS.attr('string'), 
    summary: DS.attr('string'), 
}); 

title-in-slug-format

これが現時点での私のルータのマップです:

App.Router.map(function(){ 
    this.resource('newsitems', function(){ 
    this.resource('newsitem', {path:':newsitem_id'}); 
    }); 
}); 

私が試した。ここのように私Newsitemモデルがどのように見えるかですnewsitem_idnewsitem_slugに置き換えても、これは機能しません。その他の提案はありますか?

答えて

8

ビッグおかげでリンクを作成することができるようになりますserializeを実装する必要があります。しかし、これは私がrc-1バージョンのemberで作業しているためだと思います。これはモデルフックを無効にする必要はありませんでした。私がしなければならないのは、

App.NewsitemRoute = Ember.Route.extend({ 
    serialize: function(model, params) { 
    return { newsitem_id: model.get('slug') }; 
    } 
}); 
+0

はRC6で動作します。ありがとう:) – j10io

2

この手順を実行するには、いくつかの手順が必要です。我々は指定されたスラグを一致するレコードのためApp.Newsitemを照会上記の例では

App.NewsitemRoute = Ember.Route.extend({ 
    model: function(params) { 
    console.log("Searching for newsitem with slug: ", params.newsitem_id); 
    var newsitems = App.Newsitem.findQuery({ slug: params.newsitem_id }); 
    newsitems.one("didLoad", function() { 
     newsitems.resolve(newsitems.get("firstObject")); 
    }); 
    return newsitems; 
    } 
}); 

:まず、あなたは、モデルのフックをオーバーライドするために、あなたのルートをカスタマイズする必要があります。クエリ結果の配列を単一のレコードに変換する必要があるため、単純なIDベースのルックアップよりも複雑です。これがどのように機能するかについての詳細は、以下を参照してください。how-to-find-a-model-by-any-attribute-in-ember-dot-js

はまた、あなたはとてもその燃えさしlinkToヘルパーが正しい方向に私を指しているため、マイケルに正しく

+0

です。何らかの理由で、 'model'フックが呼び出されません。コンソールに 'console.log'が表示されません。何か案は? (デバッグすると、ルートの 'enter'メソッドが呼び出されたことがわかります) – polyclick

+0

Strange - jsfiddleに例を投稿できますか? –

+0

ここにあります:http://jsfiddle.net/bitshiftcop/MqS4G/1/ 'NewsitemRoute'のconsole.logはトリガーされません。 – polyclick

関連する問題