0

私はいくつかのデータを取得してバックボーンで表示しようとしていますが、うまくいきません - エラーは発生せず、レンダリングも行われません (ガイドとして todos の例を使用して、この非常に単純なアプリを作成しました)

index.html:

<!doctype html>
<html>
<head>
    <title>Hello Backbone</title>
</head>
<body>
    <div id="sps-container">
        <div id="main">
            <ul id="service-providers"></ul>
        </div>
    </div>
</body>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min.js"></script>
<script type="text/javascript" src="/app.js"></script>

    <!-- Templates -->

    <script type="text/template" id="sp-template">
      <div class="view">
        <label><%- name %></label>
      </div>
    </script>

</html>

app.js

$(function(){

    var ServiceProvider = Backbone.Model.extend({
        defaults : function() {
            return {
                id : "",
                version : 1,
                name : ""
            };
        }
    });

    var ServiceProviderList = Backbone.Collection.extend({
        url: '/web-admin/faces/Backbone/data.json',
        model : ServiceProvider
    });

    var myCollection = new ServiceProviderList();

    var ServiceProviderView = Backbone.View.extend({
        el : $("#service-providers"),
        tagName : "li",
                initialize : function() {
                    _.bindAll(this, 'render');
                    this.template = _.template($('#sp-template').html());
                    this.render();
                },
        render : function() {
            this.$el.html(this.template(this.model.toJSON()));
            return this;
        }
    });

    myCollection.fetch(function(c) {
        var v = new ServiceProviderView(c);
        main.html(v.render().el);
    });
        var SPView = new ServiceProviderView();
});

data.json

[
    {
        "id": "03c88b31-6719-4662-9ad8-64f247de13f0", 
        "version": 1, 
        "name": "Dino Tel"
    }, 
    {
        "id": "936690b4-6a4a-436d-abed-8ca316fbae22", 
        "version": 1, 
        "name": "Krusty Tel"
    }
]

データが読み込まれていないと思いますが、他にエラーはなく、json ファイルが利用可能です。何か不足していますか?

4

1 に答える 1

2

AppView で何もレンダリングしていません。また、ServiceProvider.lenghtチェックはインスタンスmyCollectionを使用するServiceProviderView必要があり、インスタンス化して で DOM に追加する必要がありますAppView

更新 1:

また、DOM の要素をテンプレートとして使用できるかどうかもわかりません (Marionette では (with でlayout) そのようなことは許可されていますが、純粋な Backbone では許可されていません)。AppViewをテンプレートにしたのと同じ方法で をテンプレートに入れ、をServiceProviderView呼び出す必要があります$(body).html(appView.render().el)

更新 2:

もう 1 つ問題があります (少なくとも)。myCollection.fetch()ajax を使用するため、非同期です。レンダリングしたいときに、データがフェッチされていない場合があります。ビューの外で使用します。

var main = $(body);
myCollection.fetch(function(c) {
  var appView = new AppView(c);
  main.html(appView.render().el);
}

後で実際の例をまとめることができるかどうかはわかりますが、上記のすべてに対処することで、あなたに近づくはずです。

于 2013-11-07T23:15:39.750 に答える