Jquery 主干线/下划线:如何获取渲染内部模型的索引?

Jquery 主干线/下划线:如何获取渲染内部模型的索引?,jquery,backbone.js,underscore.js,Jquery,Backbone.js,Underscore.js,我不熟悉主干线和下划线,我正在尝试在渲染时获取模型索引,以便在模板内进行一些命名。 这篇文章有助于查找事件索引, 但如何在渲染或初始化时找到模型索引 var SectionView = builder.classes.ItemView.extend({ template: _.template( '<div class="pb-item-type-column pb-item custom-section">' + '<d

我不熟悉主干线和下划线,我正在尝试在渲染时获取模型索引,以便在模板内进行一些命名。 这篇文章有助于查找事件索引,

但如何在渲染或初始化时找到模型索引

  var SectionView = builder.classes.ItemView.extend({

    template: _.template(
        '<div class="pb-item-type-column pb-item custom-section">' +
            '<div class="panel fw-row">' +
                '<div class="panel-left fw-col-xs-6">' +
                    '<div class="column-title">Grid <%- item_index %></div>' +
                '</div>' +
                '<div class="panel-right fw-col-xs-6">' +
                    '<div class="controls">' +
                        '<i class="dashicons dashicons-edit edit-section-options"></i>' +
                        '<i class="dashicons dashicons-admin-page custom-section-clone"></i>' +
                        '<i class="dashicons dashicons-no custom-section-delete"></i>' +
                    '</div>' +
                '</div>' +
            '</div>' +
            '<div class="builder-items"></div>' +
        '</div>'
    ),
     events: {
        'click': 'onSectionWrapperClick',
        'click .edit-section-options': 'openSectionEdit',
        'click .custom-section-clone': 'cloneItem',
        'click .custom-section-delete': 'removeItem',
     },
     initialize: function() {
        this.defaultInitialize();

     },
     render: function() {
        this.defaultRender({

           item_index: 'this is where I need the index'
        });

     },

     cloneItem: function(e) {
        e.stopPropagation();

        var index = this.model.collection.indexOf(this.model),
           attributes = this.model.toJSON(),
           _items = attributes['_items'],
           clonedSection;

        delete attributes['_items'];

        clonedSection = new Section(attributes);
        this.model.collection.add(clonedSection, {
           at: index + 1
        });
        clonedSection.get('_items').reset(_items);

     },

     openSectionEdit: function() {
        this.modal.open();
     },
     removeItem: function() {
        this.remove();

        this.model.collection.remove(this.model);
     },

  });

  var Section = builder.classes.Item.extend({

     defaults: function() {
        var defaults = _.clone(localized.defaults);

        defaults.shortcode = fwThzSectionBuilder.uniqueShortcode(defaults.type + '_');

        return defaults;
     },
     initialize: function() {
        this.defaultInitialize();

        /**
         * get options from wp_localize_script() variable
         */
        this.modalOptions = localized.options;

        this.view = new SectionView({
           id: 'fw-builder-item-' + this.cid,
           model: this
        });

     },

     allowIncomingType: function(type) {
        if (type == 'columns') {
           return true;
        } else {
           return false;
        }
     }

  });
我正在延长这个期限

更新和解决方案:

因为这不是我的应用程序,我正在扩展一个现有的应用程序,所以很难找到我的问题。我的问题是应用程序创建者在初始化和渲染时启动了超时

因此,我很早就开始了收集搜索

穆尔萨的回答和引用的帖子都是对的


所以,对于正在寻找索引的用户,请给索引搜索一些超时时间并进行检查。收藏一定在那里

分配给集合的每个模型都应该有一个属性
this.collection
,该属性引用父集合。从那里,获取模型的索引应该很简单

render: function(){
    index = this.model.collection.indexOf(this.model)
}
请注意,如果将模型添加到多个集合中,这可能会变得更复杂一些。在这种情况下,您将需要一个对您想要索引的特定集合的引用,因为主干网无法自动知道您在谈论哪个集合

编辑:仔细查看代码后,我认为您有一个范围问题。如果你真的打电话

this.defaultRender({
   item_index: this.model.collection.indexOf(this.model)
});
然后,
的作用域是传递给defaultRender的对象,而不是视图

试试看

index = this.model.collection.indexOf(this.model)
this.defaultRender({
   item_index: index
});

this.model.get('id')
不起作用吗?@StephenThomas,id起作用,但该集合正是我需要的,它不可用。我认为他们没有在那个应用程序中绑定(这个)。在(愚蠢的否决投票巨魔),你为什么否决一个完全有效的问题,甚至不合作?@StephenThomas,不,这个.model.get('id')也不起作用,我“看到”了这个模型,但除了cid之外,里面什么都看不到,看起来他们在渲染中做了一些重置。我无法达到这个目标。我已经尝试过了,并且引用了建议相同片段的帖子。是的,模型在多个集合中使用,但我似乎找不到索引它的正确方法如果您的模型在多个集合中使用,您必须向视图传递一个指向要索引的集合的引用,由于
此.model.collection
不一定包含正确的引用。您介意展示一个示例吗,我发布了我拥有的两个扩展。引用必须来自您实例化集合的任何地方,我不确定在上面的代码中我是否看到了您这样做的地方。它可能会在你的主应用程序文件中。我很乐意提供更多帮助,但我对您的代码应该做什么以及应该在哪里做感到困惑。此外,如果
此.model.collection
在您的
克隆项
函数中起作用,则它应该在
渲染
函数中同样起作用。
index = this.model.collection.indexOf(this.model)
this.defaultRender({
   item_index: index
});