相关疑难解决方法(0)

Backbone.js - 嵌套视图是否应该保持对彼此的引用?

如果Backbone View在其render()方法中创建新视图,那么这些视图是否应该作为数据成员维护?典型的渲染方法如下所示:

render: function() {
  var myView = new MyView({ model: values });
  $('div#value', this.el).append(myView.render().el);
}
Run Code Online (Sandbox Code Playgroud)

这种渲染方法的链接意味着嵌套的视图实际上只是创建,因此它也可以链接任何渲染方法并返回一个构造良好的元素.我假设视图留给垃圾收集?

如果要修改嵌套视图......可能很重要,是应该(重新)创建,还是应该通过数据成员引用进行修改?

我遇到的问题是嵌套的视图接收事件,要求他们修改自己的嵌套视图,有时他们的父视图.

我真的不想在各地开始投掷听众.传递对父视图的引用并从子视图调用render()会导致内存泄漏,因为父视图会创建一个新的子视图,而原始子视图会维护对其父视图的引用!

目前它不像框架那样.有没有人有任何资源可以帮助我以类似框架的方式解决这个问题?

backbone.js

21
推荐指数
1
解决办法
3985
查看次数

backbone.js - 从click事件访问模型

我有一个包含CellModels CellCollection的BoardView.我从数据库中获取集合,然后创建CellViews.

这一切都在游泳,直到我尝试通过BoardView上的点击事件访问CellModel.我根本无法获得基础模型......只有视图.有没有办法做到这一点?

我试图在下面包含相关代码:

CellModel = Backbone.Model.extend({});

CellCollection = Backbone.Collection.extend({
    model : CellModel
});

CellView = Backbone.View.extend({
    className : 'cell',
});

BoardView = Backbone.View.extend({
    this.model.cells = new CellCollection();

    render : function() {
        this.cellList    = this.$('.cells');
        return this;
    },

    allCells : function(cells) {
        this.cellList.html('');
        this.model.cells.each(this.addCell);
        return this;
    },

    addCell : function(cell) {
        var view = new Views.CellView({
            model : cell
        }).render();

        this.cellList.append(view.el);
    },

    events : {
        'click .cell' : 'analyzeCellClick',
    },

    analyzeCellClick : function(e) {
        // ?????????
    }
});
Run Code Online (Sandbox Code Playgroud)

我需要在BoardView上发生"发生",而不是CellView,因为它涉及特定于电路板的逻辑.

backbone.js

9
推荐指数
3
解决办法
1万
查看次数

在Backbone.js中使用路由器管理视图

我正在使用具有以下布局的单页面应用程序:

应用程序的布局

我使用Backbone.js路由器来管理在屏幕上加载的元素:

var AppRouter = Backbone.Router.extend({
    routes: {
        ""              : "list",
        "content1"      : "content1",
        "content1/cont3": "cont3"
    },

    list: function() {
        var list = new List().render().$el; //view
        $("#List").html(list);
    },

    content1: function(){
        var cont1 = new Content1().render().$el; //view
        $("#Content1").html(cont1);
    },

    content3: function(){
        var cont3 = new Content3().render().$el; //view
        $("#Cont3").html(cont3);
    }        

});
Run Code Online (Sandbox Code Playgroud)

每次我点击#List中的列表项时,都会生成#Content1,当我在#Content1上的块上执行时,会出现#Cont3.

我面临的问题是,如果由于某种原因,我在地址为localhost/content1时刷新页面,例如; #List中的元素消失了.

我希望#List中的内容在加载时始终存在,独立于url可能是什么,以及#Content1中的内容.有没有办法使用骨干路由器实现这一目标?

谢谢

backbone.js backbone-views backbone-routing

5
推荐指数
1
解决办法
2642
查看次数