javascript - 骨干全局模型
问题描述
我怎样才能只获取一次模型并保留它以在不同条件下进行渲染?
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 种状态
- 默认恢复默认值()
- 使用接触模型属性 dialogOpen() 渲染
- 使用用户数据 contactsOpen() 渲染
我不想每次都获取用户数据是否可以执行一次并将其存储在某个变量中?但是当我每次调用 restoreDefaults() 时 this.User 也被清除为默认值。为什么?为什么 this.User 等于 this.model?即使我这样做
var User = this.User;
this.model = User;
是平等的吗?
this.model = this.User
我想不会。我错了吗?我能做些什么?
解决方案
你this.model
和User
是同一个对象(同一个引用)。
好的做法是您无需保留User
在此视图中。无需这样做User: new User
。
无需为模型设置新数据this.model.set(this.User.defaults());
我认为你不应该改变用户模型。如果需要,您可以创建另一个模型,不要直接接触用户模型。
注意:new HeaderView({model: User})
. 模型参数是特殊选项,如果通过,将直接附加到视图。所以你可以在视图中访问this.model
推荐阅读
- javascript - 如何使用api在html div中获取图像
- c++ - 方法内部的函数原型?
- laravel - Laravel Homestead:无法从 VM 内部 ping 任何 .local 站点
- python - 为不同的系统配置定义动态环境路径变量
- python - 加载模块python
- angular - 如何使用 ionic 4 在数组列表中绑定操作表?
- typescript - RXJS Observable 在第一次运行管道后意外完成
- vue.js - 如何修复 bootstrap-vue 表中的错误排序
- data-science - 当丢失 60% 的数据时,您如何处理丢失的数据?
- qt - 如何正确配置 QDockWidget 以使其显示/隐藏?