0
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});
                });
    });

_.each 在上面的代码中没有旋转。

更新 这里是我的子菜单 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 会旋转循环,但不会触发适当的模型视图更新方法。

4

2 回答 2

2

你应该改变这一行

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

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

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

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

于 2012-05-16T05:50:18.070 回答
0

看来答案肯定要靠猜测来给出,因为您发布的代码量很少。但这是我的尝试

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

  • 其次,如果您需要索引处的模型,则at集合中有方法,因此简化为this.collection.at(hIndex).attributes,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 是newCollection 的 instance( ) (您使用的)

于 2012-05-16T05:18:08.900 回答