0

私はBackbone.jsとParseを初めて使用するので、具体的でない場合はお詫びします。

初期化時にTypeErrorをスローするビューがあります。問題の行を削除して修正しても、コード内に別のエラーがスローされ、それ以外の場合は完全に受け入れられます。

これが私が得るエラーです:

Uncaught TypeError: Cannot call method 'bind' of undefined views.js:59
Uncaught TypeError: Cannot call method 'bind' of undefined views.js:59

ビューのinit関数の59行目と60行目は次のとおりです。

initialize: function() {
    this.model.bind("reset", this.render, this);
    this.model.bind("add", this.appendNewJob, this);
}

さらにコードが必要な場合は、コメントでお知らせください。更新:要求に応じて、renderおよびappendNewJob関数:

render: function(eventName) {
    _.each(this.model.models, function(job){
        this.appendNewJob(job);
    }, this);
    this.delegateEvents();
    return this.el;
},
appendNewJob: function(job){
    this.$el.append(new JobListItemView({
        model: job
    }).render());
}

私のルーター:

var AppRouter = Parse.Router.extend({
    initialize: function() {
        $('#header').html(new HeaderView().render());
    },
    routes: {
        "": "list",
        "jobs": "list",
        "settings": "viewSettings"
    },
    list: function() {
        var self = this;
        FB.getLoginStatus(function(response){
            if(response.status === 'connected') {
                // logged in.
                self.before(function() {
                    self.showView('#content', new JobListView());
                });
            } else if(response.status === 'not_authorized') {
                // not authorized.
            } else {
                // not connected.
                $('#app').hide();
                self.before(function() {
                    self.showView('#login', new StartView());
                });
            }
        });
    },
    viewSettings: function() {
        var self = this;
        FB.getLoginStatus(function(response){
            if(response.status === 'connected') {
                // logged in.
                self.before(function() {
                    self.showView('#content', new SettingsView());
                });
            } else if(response.status === 'not_authorized') {
                // not authorized.
            } else {
                // not connected.
                $('#app').hide();
                self.before(function() {
                    self.showView('#login', new StartView());
                });
            }
        });
        $('#filterBar').hide();
    },
    showView: function(selector, view) {
        if(this.currentView) this.currentView.close();
        $(selector).html(view.render());
        this.currentView = view;
        return view;
    },
    before: function(callback) {
        if(this.jobList) {
            if(callback) callback.call(this);
        } else {
            this.jobList = new JobCollection();
            var self= this;
            this.jobList.fetch({
                success: function() {
                    var joblist = new JobListView({
                        model: self.jobList
                    }).render();
                    $('#content').html(joblist);
                    if(callback) callback.call(self);
                }
            });
        }
    }
});

更新:バックボーンの代わりに解析jsライブラリも使用しています。

4

1 に答える 1

1

オプションを渡さずにビューを初期化していmodelます。このエラーは標準のJavaScriptエラーであり、59行目this.modelが未定義であることを示しています。

this.model.bind("reset", this.render, this);

this.modelモデルをビューに指定しない限り、ビューにプロパティを含めることはできません。

したがって、代わりに:

new JobListView();

あなたはそれをで初期化する必要があります

new JobListView({model: <insert your model here>});
于 2012-12-12T12:11:38.343 に答える