1

バックエンドで Django を使用してバックボーン アプリケーションを作成しようとしていました。バックボーンのチュートリアルに従っていました。次のコードを使用しました。

コード

<!doctype html>
<html lang = "en">
    <meta charset = "utf-8">
    <title>IstreetApp</title>
    <link rel="stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <h1>Book Manager</h1>
        <hr />
        <div class="page"></div>
    </div>

    <script type = "text/template" id = "booklist.template">

    </script>

    <script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src = "https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js"></script>
    <script src = "https://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.10/backbone-min.js"></script>
    <script>

        $.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
            options.url = 'http://backbonejs-beginner.herokuapp.com' + options.url;
        });

        var Books = Backbone.Collection.extend({
            url: '/books'
        });

        var BookList = Backbone.View.extend({
            el: '.page',
            render: function () {
                var that = this;
                var books = new Books();
                books.fetch({
                    success: function(books) {
                        var template = _.template($('#booklist.template').html(), {books: books.models});
                        that.$el.html(template);
                    }
                })
            }
        });

        var Router = Backbone.Router.extend({
            routes: {
                '': 'home'
            }
        })

        var bookList = new BookList();

        var router = new Router();
        router.on('route:home', function () {
            bookList.render();
        });

        Backbone.history.start();
    </script>

</body>
</html>

コレクションが定義されていないため、成功コードは実行されません。コレクション データは Django を介してサーバーから取得する必要があると思いますが、その方法と形式がわかりません。親切に助けてください。私はバックボーンと Django にかなり慣れていません。

4

2 に答える 2

2

コレクションでfetchを呼び出すと、次のAJAXリクエストが行われます。

 http://backbonejs-beginner.herokuapp.com/books

ただし、そこにはAPIが設定されていません。次の2つのいずれかが発生する必要があります。

1)既存のAPIを含む別のURLを指すようにコードを変更する必要があります(おそらく、使用しているチュートリアルにそのようなAPIがあります)

2)yoursever.comでそのようなAPIを自分で作成する必要があります(そして、代わりにバックボーンコードがそのAPIのURLを指すようにします)

それをサポートするサーバーがなければ、Backboneでのandなどの操作はsave単純fetchに機能しません。

ちなみに、DjangoはWebサイトのフレームワークです。これを使用してサーバー側のAPIを作成することはできますが、それは実際にはDjangoの焦点では​​ありません。このため、DjangoでRESTful API(つまり、Backboneが好む種類)を実行するための優れたサードパーティライブラリがいくつか存在します。個人的には、Django REST Framework(私はそれを使用していてうまく機能します)またはTastyPie(使用したことはありませんが、非常に人気があります)のいずれかをお勧めします。

于 2013-03-16T19:15:25.600 に答える
0

バックボーン コレクションを使用する場合、API URL ( http://backbonejs-beginner.herokuapp.com/books )からオブジェクトの json 配列を返す必要があります。

{[{"name":"bookname", "publisher": "penguin"}, {"name":"bookname", "publisher":"penguin"}]}

コレクション用のモデルも必要です。モデルは次の例のようになります。

var Book = Backbone.Model.extend({
defaults: {
"name":  "",
"publisher": ""
}
});

コレクションが機能する方法は、json 配列を解析し、配列内の各オブジェクトを特定のモデルに変換することです (この時点では、名前と出版社の値を持つ個々の本)。

モデルで .fetch() を作成すると、GET リクエストが作成されるため、http://backbonejs-beginner.herokuapp.com/books URL が GET リクエストを受信し、json データで応答できるように準備されていることを確認してください。一番上に指定した形式。

于 2015-07-13T17:09:27.243 に答える