-1

私のbackbone.jsビューで2つの関数をバインドしようとしていますが、なぜ機能しないのかわかりません。

誰でもアドバイスできますか?

define([
    'jquery',
    'underscore',
    'backbone',
    'libs/jquery_ui_dependency',
    'vehicle/js/collections/MakeSet',
    'vehicle/js/collections/ModelSet',
    'vehicle/js/collections/TrimSet',
    'vehicle/js/collections/YearSet',
    'vehicle/js/views/Paginator'
], function($, _, Backbone, JQueryUi, MakeSet, ModelSet, TrimSet, YearSet, Paginator){
    'use strict';
    var BrowseVehicleView = Backbone.View.extend({
        el: $('#vehicle-browse-form'),
        initialize: function(){

            JQueryUi.init();

            _.bindAll(this, 'render', 'onMakeChange');

            //define array of elements to be used in DOM manipulations
            this.elements = {
                "make"       : $('#id_make',       this.el),
                "model"      : $('#id_model',      this.el),
                "trim"       : $('#id_trim',       this.el),
                "year_from"  : $('#id_year_from',  this.el),
                "year_to"    : $('#id_year_to',    this.el),
                "price_from" : $('#id_price_from', this.el),
                "price_to"   : $('#id_price_to',   this.el)
            }




        },
        events: {
            "change #id_make"           : "onMakeChange",
            "change #id_model"          : "onModelChange",
            "change #id_trim"           : "onTrimChange"
        },
        render: function(){

            Paginator.filter({
                model__make:   this.elements.make.val(),
                model__model:  this.elements.model.val(),
                model__trim:   this.elements.trim.val()
            });    

        },
        onMakeChange: function(event) {

            this.resetElement([
                this.elements.model,
                this.elements.trim,
                this.elements.year_from,
                this.elements.year_to
            ]);

            // load models
            this.RenderCollection(ModelSet, {make: this.elements.make.val()}, [this.elements.model]);


        },

ここで達成しようとしているのは、onMakeChangeが呼び出されるたびに、render関数も呼び出してPaginator.filter()をレンダリングする必要があるということです。

4

1 に答える 1

1

_.bindAllは、メソッドが呼び出されたときに、「this」の値が指定した値に設定されることを保証します。したがって、_。bindAll(this、'render'、'onMakeChange')は、renderまたはonMakeChangeが呼び出されたときに、BrowseVehicleViewが'this'の値として設定されることを指定します。

muが述べたように、おそらくonMakeChange()内でthis.render()を手動で呼び出すか、this.renderをイベントハンドラーとしてモデルによって発生したイベントの1つにバインドする必要があります。

于 2012-11-05T20:07:35.657 に答える