6

私は ember.js でライブ検索を行っています。これがコードです

App.Router.map ->
    @resource "index", {path : "/"}
    @resource "index", {path : "/:query"}

App.Torrents =
    findByQuery : (query) ->
        url = "/api/find/#{query}"
        $.getJSON(url)

App.IndexRoute = Ember.Route.extend

    model : (params) ->
        App.Torrents.findByQuery(params.query)

App.IndexController = Ember.ArrayController.extend

    onChangeQuery : _.debounce(->
        query = @get("query")
        @transitionToRoute("index", {query  : query})
    , 500).observes("query")

入力にバインドされたクエリ プロパティがあります。入力が変化したとき、新しいクエリパラメータを渡すルートに遷移したいのですが、IndexRoute.model メソッドが呼び出されていません。

4

2 に答える 2

2

申し訳ありませんが、遅くなりました。これはあなたにとって役に立たないかもしれません。他の人に役立つかもしれない場合に備えて、ここに投稿したかっただけです。

このリンクは私を助け、私の問題を解決しました。

アプローチ 1:ルートのモデルを提供できます。モデルは、ルートのシリアライズ フックを使用して URL にシリアライズされます。

var model = self.store.find( 'campaign', { fb_id: fb_id } );
self.transitionToRoute( 'campaign', model);

これはルーティングには問題なく機能しますが、URL が改ざんされる可能性があります。この場合、新しいルートに渡されたオブジェクトをシリアル化し、URL を修正するためのロジックを追加する必要があります。

アプローチ 2:リテラル (数値や文字列など) が渡された場合、代わりに識別子として扱われます。この場合、ルートのモデル フックがトリガーされます。

self.transitionToRoute( 'campaign', fb_id);

これにより、model() が呼び出され、ルーティング時に必要な URL が正しく表示されます。setupController() は、model() の直後に呼び出されます。

2番目のものは私にとってはうまくいきました。それが役に立ち、上記の質問に答えてくれることを願っています。

于 2015-10-13T12:31:16.267 に答える