gpt4 book ai didi

javascript - 主干 View 未在二次获取时更新

转载 作者:行者123 更新时间:2023-11-30 05:43:37 26 4
gpt4 key购买 nike

我正在使用 Backbone 显示项目列表,由服务器上的 JSON 填充。

    //Models
var Note = Backbone.Model.extend();

var NoteList = Backbone.Collection.extend({
model: Note,
url: "http://www.myserver.com/notes/notes.json"
});

var Notes = new NoteList;

//Views
var NoteView = Backbone.View.extend({
tagName: "li",
template: _.template($('#noteTemplate').html()),
initialize: function() {
this.listenTo(this.model, 'change', this.render);
},
render: function() {
this.$el.html(this.template(this.model.toJSON()));
return this;
}
});

var AppView = Backbone.View.extend({
el: $("#specificationNotes"),
noteTemplate: _.template($('#noteTemplate').html()),
initialize: function() {
this.listenTo(Notes, 'reset', this.addAll);
this.listenTo(Notes, 'all', this.render);
Notes.fetch({reset:true});
},
addOne: function(note) {
var view = new NoteView({model: note});
this.$("#notesList").append(view.render().el);
},
addAll: function() {
Notes.each(this.addOne, this);
}
});
var App = new AppView;

初始抓取正确抓取内容并显示列表。我正在使用一个 jQuery 对话框来“添加一个注释”,它简单地发布到一个 RESTful API,在 ajax 发布成功后我调用

    Notes.fetch();

并且模型已更新,但 View 未更改。

最佳答案

您的 AppView 没有渲染方法,因此由于处理程序绑定(bind)到“重置”事件,您的第一次提取会导致绘制,但第二次提取不会。这是一个蛮力:

render: function() {
this.$el.html(""); // so we don't readd the same items on re-render
this.addAll();
}

效率低下,因为它每次都会从头开始重新绘制所有笔记,但它至少应该让您在屏幕上看到实时变化。并且可能替换

this.listenTo(Notes, 'reset', this.addAll);
this.listenTo(Notes, 'all', this.render);

this.listenTo(Notes, 'reset', this.render);
this.listenTo(Notes, 'sync', this.render);

关于javascript - 主干 View 未在二次获取时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19345807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com