骨干模型在将它们设置为新值后返回集合模型的旧值

时间:2015-10-07 09:09:38

标签: javascript backbone.js backbone-relational

以下是backbonejs应用程序中Schedule集合的一部分:

App.Schedule = App.Games.extend({
    /* url: 'data/json/server/schedules.json' */
    url: '../rest/schedule',
    initialize: function() {
        var self = this;
        this.fetch({
            success: function() {
                self.updateLocalTime();
                app.eventBus.events.trigger('schedule:created', "schedule");
            }
        });
    },
    updateLocalTime: function() {
        var timeUTC = "";
        var timeLocal = "";
        for (var ind = 0; ind < this.models.length; ind++) {
            timeServer = this.models[ind].get('date');
            timeLocal = convertServerTimeToLocal(timeServer);
            this.models[ind].set('date', timeLocal.getTime());
        }
    },
....
}

奥运会是:

App.Games = Backbone.Collection.extend({
    model: App.Game,
    url: '/api/games/'
});

App.Game是:

App.Game = Backbone.RelationalModel.extend({
    urlRoot: 'data/json/game.txt',
    idAttribute: 'id',
    relations: [{
            type: Backbone.HasOne,
            key: 'team1',
            relatedModel: 'App.GameTeam',
            reverseRelation: {
                key: 'game1',
                includeInJSON: 'id'
            }
        }, {
            type: Backbone.HasOne,
            key: 'team2',
            relatedModel: 'App.GameTeam',
            reverseRelation: {
                key: 'game2',
                includeInJSON: 'id'
            }
        } 
    ]
});

正如您在成功获取后所看到的那样,它调用updateLocalTime函数,该函数将日期属性设置为集合中的每个模型。

它有效。但经过一段时间后,由于某种原因,它又回归旧的价值观。我不明白为什么会这样。

打开Schedule View后我可以看到这些值: http://pastebin.com/Jdv4tmHs

没有其他代码故意更改值。我认为我的观点和模型的方式有问题。或者在其他地方有一个模型的副本。你能帮忙吗?

  

编辑1:

在使用以下代码加载ScheduleView之前的计划:

app.myTeam.schedule = new App.Schedule();
  

编辑2:   scheduleView简要说明:

var ScheduleView = Backbone.View.extend({
    initialize: function() {
  ...
       this.mySchedule = new MyScheduleView({
            el: "#schedule_myschedule_view"
        });
...  
      this.render();
    }, ...
}

var MyScheduleView = ScheduleView.extend({
    initialize: function() {
    ...
        this.collection = app.myTeam.schedule;
       ...
    },
}
  

编辑3:

我找到了我的收藏模型被更改的地方。我使用骨干关系和骨干。在其内部的某些代码中,它的代码发生了变化。

以下是骨干关系中的位置:

/**
     * Override Backbone.Collection.set, so we'll create objects from attributes where required,
     * and update the existing models. Also, trigger 'relational:add'.
     */
    var set = Backbone.Collection.prototype.__set = Backbone.Collection.prototype.set;

在循环中的那个函数内部,它遍历所有模型并将值更改回旧的... 谁知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

只是一个盲目的镜头,但也许:你设置模型,但你不保存它们。因此,每次获取时,都会获得旧值。