我正在尝试创建一个包含任务和子任务的通用待办事项列表。任何给定的待办事项列表将具有一个或多个任务,并且每个任务将具有一个或多个子任务。对于每个子任务,我显示的是显示任务和子任务的卡,以及有关用户的其他一些相关信息。因此,为任何给定列表呈现的卡的数量等于子任务的数量,并且可以按任务分类。
对我来说棘手的部分是我需要能够引用这些卡(因为我将进行API调用以获取任务和子任务数据 - 这两个数据都是数组,顺便提一下 - 来自不同类型的列表),我不确定引用有效具有2个索引(任务和子任务)的最佳方法。
我的想法一直专注于创建任务的toDoList数组:子任务对象[{task 1, subtask 1}, {task 1, subtask 2}, {task 2, subtask 1), etc}]
- 但是当我开始这样做时,我会陷入两个地方:
以编程方式创建键值对(我使用嵌套循环来迭代任务和子任务)
以后如何引用它们,因为我需要关联这些任务:例如,具有特定DOM对象的子任务对执行隐藏它们等功能。
我有一些代码,但感觉真的很不合适,所以甚至不包括在这里。基本上,我觉得有一个简单的解决方案,不到十几行代码,一个比我更好的程序员会立刻看到,我很感激帮助。非常感谢!
答案 0 :(得分:1)
不确定您对编写数据结构有多少控制权,但也许这样的事情可行。
这里的想法是,您为所有子任务提供ID,然后通过一系列子任务ID跟踪任务的子任务。
var tasks = [
{name: 'clean apartment', subtasks: [1, 2, 3]},
{name: 'do the dishes', subtasks: [6]},
{name: 'eat lunch', subtasks: [4, 5]}
];
var subtasks = [
{name: 'vaccuum', id: 1},
{name: 'dust', id: 2},
{name: 'wipe down', id: 3},
{name: 'make sandwich', id: 4},
{name: 'drink a beer', id: 5},
{name: 'soak pans', id: 6},
];
var i, j, l = tasks.length;
for(i; i < l; i++) {
var task = tasks[i],
ll = task.subtasks.length;
for(j=0; j < ll; j++) {
// Now you know the parent task and all its subtasks
}
}
此外,如果您不介意使用像underscore这样的库的帮助,您可以采用相反的方式。这样,您可以为所有任务提供ID,然后为子任务提供task
字段,该字段将它们映射到任务。使用underscore's findWhere
,您可以在迭代每个子任务时轻松查找任务。
var tasks = [
{name: 'clean apartment', id: 1},
{name: 'do the dishes', id: 2},
{name: 'eat lunch', id: 3}
];
var subtasks = [
{name: 'vaccuum', task: 1},
{name: 'dust', task: 1},
{name: 'wipe down', task: 1},
{name: 'make sandwich', task: 3},
{name: 'drink a beer', task: 2},
{name: 'soak pans', task: 2},
];
for(var i = 0; i < subtasks.length; i++) {
var subtask = subtasks[i],
task = _.findWhere(tasks, {id: subtask.task})
// Now you know the subtask and its task
}
根据我发布的评论,我还创建了一个小提琴来举例说明创建子任务卡:http://jsfiddle.net/grammar/ynw0eb25/
答案 1 :(得分:0)
这样的结构能否胜任这项工作?
[
{taskId: '1',
subtasks:[{subtaskId:'1', otherAttributes:'...'},
{subtaskId:'2', otherAttributes:'...'},
...
]
},
{taskId: '2',
subtasks:[{subtaskId:'1', otherAttributes:'...'},
...
]
}
....
]
&#13;