2016-04-11 11 views
1

とCONCATENATE関数名Iは、次のコードを持っている:ノックアウトJS - 配列値

VIEW:この部分data-bind="checked: $parent.schedule().Friday

<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は、その名前で関数を呼び出す必要があります現在のdayOfWeek(このハードコードされた例では、Friday - この特定の日に予想どおりに機能します)のscheduleモデルです。ただし、 scheduleのモデルでは電話機能がdayOfWeekで、私は欲しいものではありません。私は、次のやってみました:

VIEW

checked: $parent.getCurrentDay(dayOfWeek)

MODEL:checked: $parent.schedule().Mondayなど

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は、文字列であります

I woulどんな助けにも大いに感謝しています!

答えて

2

カッコ表記をしたいような音:あなたが指摘してきたように

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

またはdayOfWeek場合は、(それはあなたのコードでそれのようには見えませんが、)

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

観測可能です.dayOfWeekは、実際にdayOfWeekと呼ばれるプロパティを探します。 [dayOfWeek]は、変数dayOfWeek(たとえば、"Friday"など)の値をとり、その名前のプロパティを検索します。

+1

ありがとうTJ!それは魅力のように働く。確かにそれは観測可能ではないので、最初の解決策は私が使用したものです。私はあなたの答えを数分で受け入れるだろう:) – Pawel

関連する問題