如何只获取模型一次并保留它以在不同条件下进行渲染?
define(
["backbone", "jquery", "app/config", "app/TemplateManager", "app/User"],
function(Backbone, $, config, TemplateManager, User) {
var HeaderView = Backbone.View.extend({
tagName: "div",
className: "window-header",
User: new User,
events: {
},
initialize: function() {
var User = this.User;
if(!(this.model instanceof Backbone.Model)) {
this.model = User;
}
this.listenTo(Backbone, "dialog:open", this.dialogOpen);
this.listenTo(Backbone, "contacts:open", this.contactsOpen);
this.listenTo(Backbone, "window:close", this.restoreDefaults);
this.restoreDefaults();
// this.render();
},
render: function() {
var self = this;
TemplateManager.get("window-header", function(template) {
self.model.validate();
self.$el.html(template(self.model.toJSON()));
$("#window").prepend(self.$el);
});
return this;
},
dialogOpen: function(contact) {
this.model.set(contact.attributes);
this.render();
},
contactsOpen: function() {
if(!this.User.has("id")) {
var self = this;
this.User.fetch({
success: function(model, response, options) {
self.model.set(self.User.attributes);
self.render();
}
});
} else {
this.model.set(this.User.attributes);
this.render();
}
},
restoreDefaults() {
this.model.set(this.User.defaults());
this.render();
},
});
return HeaderView;
}
);
因此,在我的应用程序中,WindowHeader应该有3种状态
1.预设还原预设值()
1.使用接触模型属性对话框Open()渲染
1.使用用户数据contactsOpen()进行渲染
我不想每次都取用户数据,是否可以只取一次并将其存储在某个变量中?但当我每次调用restoreDefaults()时,用户也被清除为默认值。为什么?为什么这样。用户等于这个。模型?即使我这样做
var User = this.User;
this.model = User;
是否相等?
this.model = this.User
我想是的。我错了吗?我能做什么?
2条答案
按热度按时间wztqucjr1#
你的
this.model
和User
是同一个对象(同一个引用)。最好的做法是不需要在这个视图中保留
User
,也不需要这样做User: new User
。不需要设置新的数据模型
this.model.set(this.User.defaults());
我认为你不应该改变用户模型。如果需要,你可以创建另一个模型,不要直接接触用户模型。注意:
new HeaderView({model: User})
. model param是特殊选项,如果传递,将直接附加到视图。因此您可以在视图this.model
中访问xytpbqjk2#
我知道了!我必须克隆以获得新模型示例