相关疑难解决方法(0)

Backbone.js:重新填充或重新创建视图?

在我的Web应用程序中,左侧的表中有用户列表,右侧有用户详细信息窗格.当管理员单击表中的用户时,其详细信息应显示在右侧.

我左边有一个UserListView和UserRowView,右边有一个UserDetailView.事情很有效,但我有一种奇怪的行为.如果我单击左侧的某些用户,然后单击其中一个用户的删除,我会为所有已显示的用户提供连续的javascript确认框.

看起来所有以前显示的视图的事件绑定都没有被删除,这似乎是正常的.我不应该每次在UserRowView上都做一个新的UserDetailView?我应该维护一个视图并更改其参考模型吗?我应该跟踪当前视图并在创建新视图之前将其删除吗?我有点迷茫,任何想法都会受到欢迎.谢谢 !

这是左视图的代码(行显示,单击事件,右视图创建)

window.UserRowView = Backbone.View.extend({
    tagName : "tr",
    events : {
        "click" : "click",
    },
    render : function() {
        $(this.el).html(ich.bbViewUserTr(this.model.toJSON()));
        return this;
    },
    click : function() {
        var view = new UserDetailView({model:this.model})
        view.render()
    }
})
Run Code Online (Sandbox Code Playgroud)

和右视图的代码(删除按钮)

window.UserDetailView = Backbone.View.extend({
    el : $("#bbBoxUserDetail"),
    events : {
        "click .delete" : "deleteUser"
    },
    initialize : function() {
        this.model.bind('destroy', function(){this.el.hide()}, this);
    },
    render : function() {
        this.el.html(ich.bbViewUserDetail(this.model.toJSON()));
        this.el.show();
    },
    deleteUser : function() {
        if (confirm("Really delete user " + this.model.get("login") + …
Run Code Online (Sandbox Code Playgroud)

javascript templates backbone.js

82
推荐指数
4
解决办法
3万
查看次数

更改视图的模型时,更换模型或创建新视图更好吗?

我的Backbone应用程序中有一个电子邮件视图.它目前在view我的控制器的动作中实例化.它有点像这样:

routes: {
  'email/:id': email
},

//...

email: function (id) {
  var email = new Email({
    id: id
  });
  this.emailView = new EmailView({
    model: email
  });
  email.fetch();
}
Run Code Online (Sandbox Code Playgroud)

现在,问题是,如果我访问一封电子邮件,然后是另一封电子邮件,我最终会创建两个单独EmailView的邮件.这意味着,例如,其中的删除链接EmailView绑定到两个单独的Email模型,因此单击删除将删除两者(不是一件好事).

我正在寻找两种解决方案.在一个,我缓存EmailView,并更新其模型.那么问题是我必须重新绑定eventsin EmailView.

另一种解决方案EmailView是在我现在创建一个新的解决方案,但EmailView.el在替换之前解开旧的事件.

我是以正确的方式来做这件事的吗?有没有更好的方法来处理这种情况?提前干杯.

backbone.js

17
推荐指数
1
解决办法
5684
查看次数

标签 统计

backbone.js ×2

javascript ×1

templates ×1