使用CoffeeScript过滤动态提取的下拉列表

时间:2017-10-03 18:17:19

标签: jquery coffeescript

我最近继承了一个项目,其中一些表单使用CoffeeScript来动态获取和发布数据。 CoffeeScript通过不同的问题划分表格。我试图操纵的一个问题涉及一个下拉列表,其中包含通过进行API调用动态获取的选项。

CoffeeScript的:

 new QS.JBChoice
    name: 'PrimaryJob'
    questionText: 'What is your primary job (required)?'
    maximumSelectionSize: 1
    choiceID: 'Job_Choice'
    skipLogic: (context) -> JobSkip(context)
    validateLogic: (validator, context) -> JobValidate(validator, context, 'Primary Job Required')
    questionID: 16

呈现表单时,会出现一个包含动态提取数据的下拉列表。现在,我想从此下拉列表中获取数据并对其进行过滤,以便仅显示特定选项。

应该注意,作业类型的每个选项都具有在进行API调用时获取的特定整数值。我实际上有代码可以防止在选择特定值时出现此问题。

使用CoffeeScript删除问题:

 skipLogic: (context) -> JobSkipLogic(context)

 JobSkipLogic = (context) ->
if !context.answers.Jobs?
    return true
jobs = choiceAsideFrom(context.answers.Jobs, [100, 105, 110, 115])    
not jobs

choiceAsideFrom = (answer, choices) ->
    count = numOverlaps(answer, choices)
    answerCount = answer.split(',').length
    count != -1 && answerCount > 0 && count < answerCount

正如您所看到的,Jobs由上面自定义choiceAsideFrom函数中传递的代码标识。

我想知道是否有一种方法可以使用类似的方法通过这些标识符过滤这些作业类型。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

很难说这里到底发生了什么(即不确定numOverlaps是什么,我不知道Job模型需要什么。但是,如果您正在寻找一种可以帮助您按类型标识符过滤Jobs列表的方法,那么您可以选择以下几种方法:

typeIdentifierToFilterBy = 42
# Something like lodash or underscore's filter method
jobsOfType = _.filter(listOfJobs, {type: typeIdentifierToFilterBy})

# Or the JavaScript Array filter method
jobsOfType = listOfJobs.filter((job)-> job.type is typeIdentifierToFilterBy)

# Or CoffeeScript comprehension
jobsOfType = (job for job in listOfJobs when job.type is typeIdentifierToFilterBy)

不完全确定确切的问题,但希望这有帮助。