在backbone.js中存储和访问视图列表的更好方法是什么?

在backbone.js中存储和访问视图列表的更好方法是什么?,backbone.js,Backbone.js,我已经使用主干网很长一段时间了,每次我得到具有自己事件和行为的视图的动态列表时,我都想知道应该如何存储它们。我有两种方法,我的想法是 在另一个视图中内部存储视图。这需要适当过滤的开销,但有点独立于DOM+,可能会有更好的内存使用率 只需生成视图,将它们放入DOM中,并使用jquery触发视图的事件,如$('someviewid').trigger('somecustomfunction')-更容易编写和访问,但依赖项更难查看,而且如果我只是删除DOM节点,我不确定视图/模型是否会被删除 你推荐什

我已经使用主干网很长一段时间了,每次我得到具有自己事件和行为的视图的动态列表时,我都想知道应该如何存储它们。我有两种方法,我的想法是

  • 在另一个视图中内部存储视图。这需要适当过滤的开销,但有点独立于DOM+,可能会有更好的内存使用率
  • 只需生成视图,将它们放入DOM中,并使用jquery触发视图的事件,如
    $('someviewid').trigger('somecustomfunction')-更容易编写和访问,但依赖项更难查看,而且如果我只是删除DOM节点,我不确定视图/模型是否会被删除
  • 你推荐什么

    这里是扩展的第二个示例,其中新视图只是附加到内部html,而StoryView本身被遗忘。但是如果我想从这个列表中访问特定的视图,我必须使用DOM属性,比如id或数据,然后使用jquery访问器触发视图函数

    Devclub.Views.StoriesList = Backbone.View.extend({
        initialize: function () {
            this.collection.bind('reset', this.reset, this);
            this.collection.fetch();
        },
    
        reset: function (modelList) {
            $(this.el).html('');
            var me = this;
    
            $.each(modelList.models, function (i, model) {
                me.add(model);
            });
        },
    
        add: function (model) {
            var contact_model = new Devclub.Models.Story(model);
            var view = new Devclub.Views.Story({
                model: contact_model
            });
    
            var storyView = view.render().el;
    
            $(this.el).append(storyView);
        }
    });
    

    相反,如果我想直接调用某些视图方法,我可以将同一个视图列表存储在数组中,并对其进行迭代

    我认为您应该保留子视图的引用。下面是Addy Osmani的一个例子

    Backbone.View.prototype.close = function() {
        if (this.onClose) {
            this.onClose();
        }
        this.remove(); };
    
    NewView = Backbone.View.extend({
        initialize: function() {
           this.childViews = [];
        },
        renderChildren: function(item) {
            var itemView = new NewChildView({ model: item });
            $(this.el).prepend(itemView.render());
            this.childViews.push(itemView);
        },
        onClose: function() {
          _(this.childViews).each(function(view) {
            view.close();
          });
        } });
    
    NewChildView = Backbone.View.extend({
        tagName: 'li',
        render: function() {
        } });
    

    你能提供一些代码吗?这个问题有点抽象,很难理解,你的确切意思是什么。。。它的目标是在解决您遇到的问题时进行详尽的练习