Knockout JS - 将函数名称与数组值连接起来

时间:2016-04-11 14:02:09

标签: javascript knockout.js

我有以下代码:

查看:

<div class="form-group days-of-week">
<!-- ko foreach: $root.daysOfWeek --> // array of week days
  <label class="col-sm-2 control-label" data-bind="text: dayOfWeek"></label> // 'dayOfWeek' being week day name, e.g. Monday, Tuesday etc.
  <div class="col-sm-10 description">
    <input type="hidden" value="0" data-bind="attr: { name: 'ScheduledRequest[DayOfWeek][' + dayOfWeek + ']' }" />
    <input type="checkbox" data-bind="checked: $parent.schedule().Friday, value: 1, attr: { name: 'ScheduledRequest[DayOfWeek][' + dayOfWeek + ']' }" class="form-control" />
  </div>
<!-- /ko -->

此部分data-bind中的data-bind="checked: $parent.schedule().Friday应调用名称为当前dayOfWeek的函数(在此硬编码示例中为Friday - 该函数按此特定的方式工作({1}}模型中的那一天)。但是,schedule模型中data-bind="checked: $parent.schedule().dayOfWeek的调用函数dayOfWeek不是我想要的。我尝试了以下操作:

查看

schedule

MODEL:

checked: $parent.getCurrentDay(dayOfWeek)

}

但是返回的self.getCurrentDay = function(day) { var dayOfWeek = ""; if(day == 'Monday') dayOfWeek = '$parent.schedule().Monday'; if(day == 'Tuesday') dayOfWeek = '$parent.schedule().Tuesday'; if(day == 'Wednesday') dayOfWeek = '$parent.schedule().Wednesday'; if(day == 'Thursday') dayOfWeek = '$parent.schedule().Thursday'; if(day == 'Friday') dayOfWeek = '$parent.schedule().Friday'; if(day == 'Saturday') dayOfWeek = '$parent.schedule().Saturday'; if(day == 'Sunday') dayOfWeek = '$parent.schedule().Sunday'; return dayOfWeek; 是一个字符串:data-bind等等。

我非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

听起来像是要括号表示法:

data-bind="checked: $parent.schedule()[dayOfWeek]"

dayOfWeek是否可观察(它在您的代码中看起来不像,但是)

data-bind="checked: $parent.schedule()[dayOfWeek()]"

正如您所指出的那样,.dayOfWeek会查找实际名为dayOfWeek的属性。 [dayOfWeek]获取变量dayOfWeek的值(例如,"Friday"或类似值),然后使用该名称查找属性。