2

backbone.js と underscore.js を使用してモデルをビューにバインドしようとしているときにUncaught ReferenceError: _auditNumber is not definedエラーが発生します

<script id="searchTemplate" type="text/template">

                        <div class="span4">
                            <p>"<%= _auditNumber %>"</p>
                        </div>
                            <div class="span4">
                            <p>"<%= _aic %>"</p>                            
                </script>

コレクション

//Collection
var AuditsCollection = Backbone.Collection.extend({

    initialize: function() {

        this.on('add', this.render);
    },

    render: function() {

        _.each(this.models, function (item) {

            var _auditView = new AuditView({
                model: item
            });

            $("#audits").append(_auditView.render().el);
        });
    },
});

モデル

var Audit = Backbone.Model.extend({

        url: function () {

            return myUrl;
        },
        defaults: {

            _auditNumber: "",
            _aic: "",           
        },
        parse: function (data) {

            data.forEach(function (auditItem) {
                var auditsCollection = new AuditsCollection();
                auditsCollection.add(JSON.stringify(auditItem));
            });
        }
    });

// Sub View
var AuditView = Backbone.View.extend({

    className: 'row-fluid',
    template: $("#searchTemplate").html(),

    render: function () {

        var tmpl = _.template(this.template);

        this.$el.html(tmpl(this.model.toJSON()));

        return this;
    }
});

簡単なものが欠けていることはわかっています。どんな助けでも大歓迎です。

4

1 に答える 1

2

2 つの問題 (少なくとも、バックボーン チュートリアルがいくつあるかを考えると、雑草の中にいるようなものです)。

  1. モデル URL が結果のリストを返しています。それがコレクションの目的です。モデルは単一のレコードを取得する必要があり、parseメソッドはモデルの属性データを返す必要があります。チュートリアルに固執する場合、カスタムurl関数は必要なく、カスタム関数はまったく必要ありませんparse

    var Audit = Backbone.Model.extend({
        url: function () {
            //This needs to be a url like /audits/42 for a single record
            return myUrl;
        },
        defaults: {
            _auditNumber: "",
            _aic: "",           
        },
        parse: function (data) {
            //this needs to return an object
            return data[0];
        }
    });
    
  2. テンプレート関数に有効なデータ オブジェクトを渡していません。

    // Sub View
    var AuditView = Backbone.View.extend({
        className: 'row-fluid',
        //compile template string into function once
        template: _.template($("#searchTemplate").html()),
        render: function () {
            //render template into unique HTML each time
            this.$el.html(this.template(this.model.toJSON()));       
            return this;
        }
    });
    
于 2013-05-30T13:50:58.530 に答える