以下是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;
在循环中的那个函数内部,它遍历所有模型并将值更改回旧的... 谁知道为什么会这样?
答案 0 :(得分:0)
只是一个盲目的镜头,但也许:你设置模型,但你不保存它们。因此,每次获取时,都会获得旧值。