0

モデルで .set を実行すると、このくそったれビューが更新されない理由について誰か考えがありますか? 私が入れたレンダリング機能と関係があるのではないかと思います...

バックボーン ビュー:

    App.Views.PanelOne = Backbone.View.extend({


    initialize: function() {
        console.log("View PanelOne Initialized");

        panelonesetting = this.model.get('panel_one');
        console.log( panelonesetting );

        _.bindAll(this, 'render');
        this.model.bind('change', this.render);

    },

    render: function(){
        if ( panelonesetting == "poolprice" ){
            this.$el.html(JST['dashboard/poolprice']({}));
        return this;
        };
        if ( panelonesetting == "none" ){
            this.$el.html(JST['dashboard/none']({}));
        return this;
        };
        if ( panelonesetting == "noconnection" ){
            this.$el.html(JST['dashboard/noconnection']({}));
        return this;
        };
    }


});

バックボーン ルーター:

App.Routers.Dashboard = Backbone.Router.extend({

    routes: {
        ""          : "index"       
        },

    initialize: function(options) {
    console.log("Router initialized");
      preflist = new App.Models.PrefList({});

    preflist.fetch({
        success: function() {
            console.log( preflist );
          paneloneview = new App.Views.PanelOne({ model: preflist });
          $('#panelone').html(paneloneview.render().$el);             
        }  
    });
  },

    index: function() {

    }


});
4

1 に答える 1

1

いくつかの偶発的なグローバルがあります。特に、ビューの にこれがありますinitialize:

panelonesetting = this.model.get('panel_one');

そして は をrenderpanelonesettingます。varそれはありませんpanelonesettingので、グローバル変数です。

initializeビューを構築するときにメソッドが呼び出され、再度呼び出されることはありません。つまりpanelonesetting、初期panel_one値が割り当てられ、更新されることはありません。そのため、モデルが変更された場合、あなたrenderは呼び出されますが、元のpanel_one設定を見ています。その結果、何も変わっていないように見えます。render必要なモデルの変更があれば、何度でも呼び出すことができ、何も起こらないことがわかります。

メソッドpanel_one内の値を確認する必要があります。render

initialize: function() {
    _.bindAll(this, 'render');
    this.model.bind('change', this.render);
},

render: function(){
    var panelonesetting = this.model.get('panel_one');
    if(panelonesetting == "poolprice")
        this.$el.html(JST['dashboard/poolprice']({}));
    if(panelonesetting == "none")
        this.$el.html(JST['dashboard/none']({}));
    if(panelonesetting == "noconnection")
        this.$el.html(JST['dashboard/noconnection']({}));
    return this;
}

ルーターの paneloneview`preflist and変数は、ほぼ確実にローカルである必要がある場合でも、グローバルです。

于 2012-12-16T03:00:56.950 に答える