[英]Backbone MVC view doesn't update on sync
我一直在尝试学习骨干网。
我设置了模型集合,每个模型都有其自己的视图,每次模型与服务器同步时都应呈现该视图。 服务器发回该模型的ID。 似乎在设置模型ID 之前正在渲染 。 如果您查看console.log()的输出,我将在呈现之前打印出模型的ID。 我还让它在发生每个事件时将其打印出来。 我得到:
undefined (model id)
add
change:id
change (not sure what changes here?)
sync
另外,我在暂停2秒钟后更改了模型的名称属性model.save('name', 'New Name')
。 这会导致另一个同步事件, 但是视图不会更新 。
这是工作代码: http : //jsfiddle.net/flackend/brB7y/1/
或在这里查看:
var game_library;
(function($) {
_.templateSettings = {
interpolate: /\{(.+?)\}/g
};
var GameModel = Backbone.Model.extend({
url: '/gh/gist/response.json/2895708/',
name: undefined,
initialize: function() {
// Create a view for this model
this.view = new GameView({model: this});
// Sync model with server
this.save();
// Bind events
this.on('sync', this.view.render());
this.on('all', this.console);
},
console: function(event, model, changes) {
console.log('['+ ++this.i +']-------------(event[:attr], model, changes)----------------');
console.log(event);
console.log(model);
console.log(changes);
},
i: 0
});
var GameCollection = Backbone.Collection.extend({
model: GameModel
});
var GameView = Backbone.View.extend({
el: $('#holder'),
template: $('#game-template').html(),
render: function() {
var template = _.template(this.template);
console.log(this.model.id);
this.$el.html(template(this.model.toJSON()));
}
});
// Instantiate new game collection
game_library = new GameCollection;
// Add a game
// Note: can only pass in 1 ID from gist, so only add 1 game.
var games = [
new GameModel({name: 'Skyrim'})
];
// Note: `game_library.add(new GameModel({name: 'Skyrim'}));` does
// not work for some reason having to do with instances...
game_library.add(games);
// 2 sec later...
window.setTimeout(function() {
game_library.get(1).save('name', 'The Elder Scrolls V: Skyrim');
}, 2000);
})( jQuery );
感谢您的帮助!!
拆下支架
// Bind events
this.on('sync', this.view.render/*()*/);
this.on('all', this.console);
更新了要点, 网址为http://jsfiddle.net/brB7y/2/ 。 我已将您的刷新调用移至可以正常工作的本地函数。 我不确定这背后的技术原因,但这是我以前使用它的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.