0

私は最初の backbone.js アプリを作成していて、ちょっとした壁にぶつかりました。おそらく、誰かがこのハードルを乗り越えるのを手伝ってくれるかもしれません (私の理解のギャップ)。私がしたい/する必要があるのは、コレクションデータをルーターに返すことです。これにより、それを剣道 UI グリッドにバインドできますが、コレクションに検索結果が表示されません...基本的なものが欠けていますが、それが何であるかはわかりません。

これが私がこれまでに持っているものです:

    ES.Router = Backbone.Router.extend({routes: {
            '': 'search',
            'search': 'search',
            'results': 'results'
        },
        results: function() {
            var resultsData = new ES.Results();
            var boo = resultsData.fetch({
                    data: JSON.stringify({"query":"myquery"}),
                    type: 'POST',
                    contentType: 'application/json'
                    });
            console.log(boo);
        }});

    ES.Result = Backbone.Model.extend();

    ES.Results = Backbone.Collection.extend({   
        model: ES.Result,
        url: '/search/query'
        });
4

1 に答える 1

2

ここにはいくつかの問題があります。

  1. フェッチは POST ではなく GET である必要があります。フェッチは何も保存または変更してはならないからです。
  2. たぶん個人的な好みかもしれませんがurl、AJAX 要求オプションを手動で変更しようとするのを避けるために、私は関数としてそうしたいと思います。
  3. fetch呼び出しは常に非同期であるためsuccess、オプション ハッシュにコールバックを追加するか、コレクションのresetイベントにリスナーを追加する必要があります。

コレクションを次のように記述します。

ES.Results = Backbone.Collection.extend({   
    initialize: function() {
        this.query = "test";
    },
    model: ES.Result,
    url: function() {
        return '/search/query?query=' + this.query;
    }
});

次に、コレクションを作成するときに検索を設定します。

var resultsData = new ES.Results();
resultsData.query = "soccer";

successand/oron("reset")イベントを使用して結果を処理します。

resultsData.on("reset", function(collection) {
    console.log(collection);
});

console.log("Fetching....");
resultsData.fetch({
    success: function(collection, response) {
        console.log("Got data!" + collection.length);
    },
    error: function(collection, response) {
        console.log("Error: " + response.responseText);
    }
});

</p>

于 2012-12-04T17:42:40.423 に答える