(更新)
抱歉,出于某种原因,我以为您在讨论互动,而不是目标。我的答案已被修改以解决目标。
是的,目标需要有一个 ID。您可以通过 JavaScript API (SCORM RTE) 或清单设置 ID。必须先设置 ID,然后才能对目标执行任何其他操作,例如设置 completion_status。
如果 SCO 请求存储客观信息,则 SCO 需要在任何其他客观信息之前先设置标识符(除非它是通过其他方式初始化的)。一旦 cmi.objectives.n.id 有了值,就不允许将数据模型元素重置为不同的值。
页 RTE 4-97
如果您不确定是否设置了 ID,您可以使用 JavaScript 查看目标是否存在以及是否已为其分配了 ID。
例子:
var obj_count = parseInt(scorm.GetValue('cmi.objectives._count'), 10);
if(obj_count === 0){
//We know for sure no objectives exist in your SCO yet.
//Try setting the ID
scorm.SetValue('cmi.objectives.0.id', 'obj1');
}
var id = scorm.GetValue('cmi.objectives.0.id');
var err = parseInt(scorm.GetLastError(), 10);
if(err == 0 && id == "obj1"){
//continue as planned...
} else {
//there is an error or the ID is undefined. Time to troubleshoot.
}
如果 ID 已设置但您仍无法设置completion_status
,则可能需要仔细检查清单:
如果为内容包清单中<imsss:objectives>
的元素定义了<imscp:item>
,则 LMS 负责根据为学习活动引用和管理的目标进度信息为 SCO 初始化目标运行时数据 (cmi.objectives.n.xxx) . 与目标相关的运行时数据 (cmi.objectives.n.xxx) 不应为活动的关联 SCO 初始化,除非在排序信息 (<imsss:primaryObjective>
或
<imsss:objective>
) 中定义了目标 ID 属性。目标 ID 属性应用于初始化 cmi.objectives.n.id 值。清单中定义的目标数量决定了需要初始化的目标状态信息的数量。