Backbone Change Event不会更新View

时间:2012-12-16 02:48:56

标签: backbone.js

有没有人想过为什么在模型上执行.set时这个darn视图不会更新?我想如果可能与我放入的渲染功能有关......

骨干视图:

    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() {

    }


});

1 个答案:

答案 0 :(得分:1)

你有一些偶然的全局变量。特别是,您在视图中initialize

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

然后render查看panelonesetting。 <{1}}上没有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`变量在几乎可以肯定是本地的时候也是全局变量。