_.each在BackboneJS中

时间:2012-05-16 04:47:11

标签: backbone.js

var MenuListView = Backbone.View.extend({
            el : '#menus',
            reset : function() {
                var hIndex = this.getTheMenuIndexHighlighting();
                _.each(this.model.models[hIndex].attributes.subMenus, function(model, index) {
                    model.set({highlight : false});
                });
    });

_。每个都不在上面的代码中旋转。

更新 这是我的子菜单json

[ {title:'Applications',bmUrl:'',id:'1',subMenus:[ {title: 'MsWord', bmUrl : 'msword.com';, id: 1, subMenus: null}, {title: 'MsExcel', bmUrl : 'msexcel.com';, id: 2, subMenus: null}, {title: 'MsPP', bmUrl : 'mspp.com';, id: 3, subMenus: null}, {title: 'MsOneNote', bmUrl : 'msonenote.com';, id: 4, subMenus: null}, {title: 'MsOutlook', bmUrl : 'msoutlook.com';, id: 5, subMenus: null} ],imgUrl:''}] 

任何人都可以告诉我原因吗?

将_.each替换为$ .each正在旋转循环,但不会触发相应的模型视图更新方法。

2 个答案:

答案 0 :(得分:1)

你应该改变这一行

this.model.models[hIndex].attributes.subMenus

this.model.at(hIndex).get("subMenus")

编辑: - 通过这样说我假设subMenus本身就是一个集合
但现在看来它是一个数组并且通过下划线网站 _。each()不可用于数组,并且只能用于集合。其中jquerys可以应用于数组。

http://documentcloud.github.com/underscore/#arrays
链接到下划线网站,注意每个都不包含在数组中

答案 1 :(得分:0)

似乎答案必须通过猜测来解决,因为您发布了少量代码。但这是我的尝试

  • 我认为这应该是 this.model.models[hIndex].attributes.subMenus转换为this.collection.models[hIndex].attributes.subMenus,假设this.model引用了一个肯定具有模型属性的集合。

  • 其次,如果您需要索引模型,则集合中有at方法,因此简化为this.collection.at(hIndex).attributes,subMenus

  • 第三,因为我们使用集合(指subMenus)你现在可以这样做this.collection.at(hIndex).get("subMenus").each(function(subMenu){alert(subMenu.toJSON());})

你的最终代码必须是(有大量的假设)

var MenuListView = Backbone.View.extend({
    el: '#menus',
    reset: function () {
        var hIndex = this.getTheMenuIndexHighlighting();
        this.collection.at(hIndex).get("subMenus").each(function (subMenu) {
            alert(subMenu.toJSON());
        })
    });

更新

因为你似乎仍然是BBjs世界的菜鸟。创建一个如下所示的视图实例,您将使上面的代码像jiffy一样工作

var viewInstance = new MenuListView({collection:Menu})

其中Menu是Collection(您使用的)

的实例(new