在将集合模型的旧值设置为新值后,获取它们的主干模型



backbonejs应用程序中的Schedule collection部分:

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());
        }
    },
....
}

The Games is:

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

应用程序。游戏:

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函数,该函数为集合中的每个模型设置日期属性。

它起作用了。但由于某种原因,一段时间后,它又回到了旧的价值观。我不明白为什么会这样。

我可以看到值后打开时间表视图: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:

我找到了我的集合模型被更改的地方。我使用骨干关系和骨干。在它代码的某个地方发生了变化。

这是在主干关系js中发生的地方:

/**
     * 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;

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

只是一个盲射,但也许:你设置了模型,但你没有保存它们。每次取值,它都会取旧值

相关内容

  • 没有找到相关文章

最新更新