1

何らかの理由で、このエラーが発生し続けます (添付のスクリーンショットを参照)。を追加しようとしまし_.bindAll(this);たが、最新バージョンの backbonejs を使用するようにコードをアップグレードしようとしました。まだ運がありません。

誰かがこれについて私を助けることができますか?

ここに画像の説明を入力

var app = app || {};

(function ($) {
'use strict';

app.EmployeeView = Backbone.View.extend({
    el: '#container',
    model: app.Employee,
    events: {
        'click #save' : 'saveEntry'
    },
    initialize: function(){
        console.log('Inside Initialization!');
        this.$empName = this.$('#txtEmpName');
        this.$department = this.$('#txtDepartment');
        this.$designation = this.$('#txtDesignation');
        this.listenTo(app.employees, 'add', this.addEmployee);
        app.employees.fetch();
        console.log('End of Initialization!');
        //this.render();
    },
    render: function () {
        console.log('Inside Render!!');
        console.log(this.model);
        this.$el.html(this.template(this.model.toJSON()));
        console.log('Inside End of Render!!');
        return this;
    },
    newAttributes: function(){
        return{
            empName: this.$empName.val(),
            department: this.$department.val(),
            designation: this.$designation.val()
        };
    },

    saveEntry: function(){
        console.log('Inside SaveEntry!');
        //console.log(this.newAttributes());
        console.log('this.model');
        console.log(app.Employee);
        //app.employees.create(this.newAttributes());
        app.Employee.set(this.newAttributes());
        app.employees.add(app.Employee);
        console.log('After SaveEntry!');
    },
    addEmployee: function (todo) {
        var view = new app.EmployeeItemView({ model: app.Employee });
        $('#empInfo').append(view.render().el);
    }
})
})(jQuery);

「collections/employees.js」のコード

var app = app || {};
(function (){
    console.log('Inside collection');
    var Employees = Backbone.Collection.extend({
        model: app.Employee,
        localStorage: new Backbone.LocalStorage('employee-db')
    });
    app.employees = new Employees();
})();

「model/employee.js」のコード

var app = app || {};
(function(){
    'use strict';

    app.Employee = Backbone.Model.extend({
        defaults: {
            empName: '',
            department: '',
            designation: '' 
        }
    });
})();
4

2 に答える 2

5

あなたはあなたの見解でこれを言っています:

model: app.Employee

app.Employeeモデル インスタンスではなく、モデルの「クラス」のように見えます。ビューのmodelプロパティにモデル インスタンスが必要です。通常、次のように言います。

var employee = new app.Employee(...);
var view = new app.EmployeeView({ model: employee });
于 2013-09-15T17:26:03.663 に答える
1

this.model.toJSON()this.modelapp.Employeeコンストラクタであるため、機能しません。EmployeeView.render実際、あなたの方法には何の意味もありません。集約ビューの場合、なぜモデルがあるのですか? それ以外の場合、2 番目のビュー クラスはEmployeeItemView何ですか? ToDo MVC の例に従っている場合は、 にモデルがないことがわかります。AppViewそのため、 でモデル化する必要はないと結論付けていますEmployeeView。そして、renderあなたが提供した方法はに属しているようEmployeeItemViewです。

次に、app.Employee.setこれはオブジェクトではなくコンストラクターの呼び出しでもあります。私はあなたが意味したと思います

saveEntry: function(){
    console.log('Inside SaveEntry!');
    app.employees.create(this.newAttributes());
    console.log('After SaveEntry!');
},

モデルを渡したい場合app.EmployeeItemViewは、コールバック引数を使用する必要があります。

addEmployee: function (employee) {
    var view = new app.EmployeeItemView({ model: employee });
    $('#empInfo').append(view.render().el);
}
于 2013-09-15T17:57:28.170 に答える