【发布时间】:2015-12-09 06:49:20
【问题描述】:
我有一个 KnockoutJS 视图模型,它从可观察数组创建文件夹列表。数组中的每个项目都有两个属性。文件夹名称必须是可观察的,因为它们可以由用户编辑。
self.folders = ko.observableArray([{
name: ko.observable('Inbox'),
editing: ko.observable(false)
}, {
name: ko.observable('Vacations'),
editing: ko.observable(false)
}]);
然后,我有一个对象列表,这些对象“在”这些文件夹中具有多个属性,但其中一个是文件夹的名称。文件夹的名称设置为 observable,因此如果名称更改,对象将保留在正确的文件夹中:
self.emails = ko.observableArray([{
from: 'Sport Clips',
subject: '$4 Off',
date: '9/6/2015',
flagged: ko.observable(false),
read: ko.observable(false),
selected: ko.observable(false),
folder: self.folders()[0].name,
attachment:false,
}...]);
最后,我有一个更新函数,它可以根据用户的选择更新电子邮件文件夹参数的值。问题在于,当用户更新文件夹位置时,实际文件夹也会使用新名称进行更新(正如您所期望的,因为它是可观察的)。
self.moveEmails = function() {
for(var i = 0; i < self.emails().length; i++) {
if (self.emails()[i].selected() == true) {
self.emails()[i].folder(this.name()); <-- this is where the name is updated
self.emails()[i].selected(false);
}
} <-- this is just a loop that looks for checked items, it works fine
}
例如,如果我当前在“收件箱”文件夹中有一个对象,并且用户将其移动到“业务”文件夹,它会更新电子邮件对象以具有业务文件夹参数,但这会导致收件箱文件夹也改名为Business。
有什么办法可以防止这种情况发生,或者有没有更好的办法来避免这个问题?
【问题讨论】:
标签: knockout.js