1

我正在创建一个允许用户输入电子邮件的邀请对话框。目前在模型中,我正在创建一个数组来保存电子邮件:

initialize : function() {
    this.model.set({
        invite_email_array : new Array()
    });
}

然后我在视图中添加/删除项目,如下所示:

this.model.get('invite_email_array').push('email@domain.com');

然后问题是当我从模型中添加或删除电子邮件时没有触发活页夹。这是我的活页夹:

binder : function() {
          model.on("change:invite_email_array", onInviteEmailArrayChange() )
}

我能够触发绑定的唯一方法是在我进行更新时手动触发它......一个丑陋的黑客

 this.model.trigger("change:invite_email_array");

关于维护电子邮件列表然后能够在添加/删除时绑定到对象的更好方法的任何建议?

谢谢

4

1 回答 1

2

在您给出的示例中,您set通过直接更改数组来绕过。为了触发更改,您需要在推送新电子邮件set更改数组。大意是:

var arr = _.clone(this.model.get('invite_email_array'));
arr.push('email@domain.com');

this.model.set({ invite_email_array: arr });

然而,一旦你引入了一个数组,可能值得考虑视图的设计是否真的反映了它的意图。任何东西的集合(或数组)通常表明是时候考虑简化模型或视图了。即使将单个电子邮件分配给它自己的视图/模型似乎太微不足道,但将一组电子邮件作为“邀请”视图的集合进行跟踪并观察相应的更改可能是有意义的。

于 2012-07-21T20:28:59.413 回答