1

我有一个菜单,点击后会创建主干视图并绑定控件。每次我点击菜单时都会发生这种情况。我需要知道的是在定义和渲染视图之前(在每次菜单单击时)如何从内存中清除骨干对象。

否则,每次单击菜单时,主干都会创建一个新视图并重新绑定所有控件。所以我得到这样的东西:

r {cid: "view1", options: Object, $el: b.fn.b.init[1], el: div#templatePlaceholder, constructor: function…}
r {cid: "view2", options: Object, $el: b.fn.b.init[1], el: div#templatePlaceholder, constructor: function…}
r {cid: "view3", options: Object, $el: b.fn.b.init[1], el: div#templatePlaceholder, constructor: function…}

注意:DOM 只显示一个渲染

编辑:代码:

            var app = {
                Collection: Backbone.Collection.extend({}),
                Model: Backbone.Model.extend({}),
                View: Backbone.View.extend({
                    initialize: function(){
                        this.setElement($('#templatePlaceholder'));
                    },
                    render: function () {
                        var that = this;
                        Q.when(formDataGet.execute()).then(function (data) {
                            that.$el.html(data);
                       });
                    },
                    events: {
                        "click button[id=lbtn]": "goLeft",
                        "click button[id=rbtn]": "goRight"  
                    },

                    goLeft: function () {
                        // Button clicked
                        console.log(this);
                    },
                    goRight: function () {
                        // Button clicked
                        console.log(this);
                    }

                }),

            };


            var view = new app.View({
            });

            view.render();

每次单击菜单项时都会触发此代码。这创造了一个新的观点。

4

1 回答 1

1

我可以在核心骨干中想到两种方法(可能还有更多,但这是一个开始)

  1. 持有对视图的引用,当需要关闭菜单时,remove()在视图上调用

  2. 您不必删除视图,您可以简单地显示/隐藏它,没有错

  3. 使用 Marrionette / Chappline / LayoutManager 有一些结构化的方式来维护您的视图

有关您的应用程序/结构的更多信息以及哪些用例将使我能够提供更多帮助

于 2013-04-15T02:13:47.177 回答