Backbone.js 全局模型

3j86kqsm  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(177)

如何只获取模型一次并保留它以在不同条件下进行渲染?

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

我想是的。我错了吗?我能做什么?

wztqucjr

wztqucjr1#

你的this.modelUser是同一个对象(同一个引用)。
最好的做法是不需要在这个视图中保留User,也不需要这样做User: new User
不需要设置新的数据模型this.model.set(this.User.defaults());我认为你不应该改变用户模型。如果需要,你可以创建另一个模型,不要直接接触用户模型。
注意:new HeaderView({model: User}) . model param是特殊选项,如果传递,将直接附加到视图。因此您可以在视图this.model中访问

xytpbqjk

xytpbqjk2#

我知道了!我必须克隆以获得新模型示例

this.model = this.User.clone();

相关问题