2016-11-24 8 views
0

ノックアウトを学習してASP.NETコアアプリケーションに統合しようとしています。Foreachは最後の要素のみを繰り返す

その後
function DayViewModel(number, name /*others*/) 
{ 
    this.dayNumber = number; 
    this.dayName = name; 
    //others 
} 

var MonthViewModel = function(days /*others*/) 
{ 
    this.monthDays = ko.observableArray(days); 
} 

$(function() 
{ 
    var tempDays = []; 

    @foreach(var day in Model.Days) 
    { 
     string dayName = day.DayNumber.ToString().PadLeft(2, '0') + " - " + Globals.GetDayName(Model.YearNumber, Model.MonthNumber, day.DayNumber, Globals.GetUICulture(Context)); 
     @:tempDays.push(DayViewModel(@day.DayNumber, "@dayName" /*others*/); 
    } 

    var monthViewModel = new MonthViewModel(tempDays /*others*/); 
    ko.applyBindings(monthViewModel); 
}); 

、テーブル::これは私が別の記事に従うことによって取得することができた最も遠い

<table id="mTable" class="table"> 
    <thead> 
     <tr> 
      <th>@Html.DisplayNameFor(model => newModel.DayNumber)</th> 
     </tr> 
    </thead> 
    <tbody data-bind="foreach: monthDays"> 
     <tr> 
      <td> 
       <a href="#" data-bind="text: dayName"></a> 
      </td> 
     </tr> 
    </tbody> 
</table> 

これは正しく配列内の項目数が同じため<tr>要素を生成し、生成されたHTMLは、tempDaysにすべて正しい項目があることを示しています。
なぜノックアウトは最後の要素だけを繰り返すのですか?私がドキュメントで見つけることができない間違ったことは何ですか?

答えて

1

あなたはここに

@:tempDays.push(new DayViewModel(@day.DayNumber, "@dayName" /*others*/);

...そうthisが最後MonthViewModel変更皆を作るすべての呼び出し、上で上書きされるだろう、MonthViewModelの新しいインスタンスを作成する必要がありますレイザーものなしフィドルです:http://jsfiddle.net/LkqTU/32570/

+0

ありがとうございました。それは完全に働いた –

-6

あなたがanglejsでこれを行う場合、foreachの代わりにng-repeatを使用します。 ng-repeatの例と構文は、w3schoolで見つけることができます。

+0

私はAngularJsを使用していないので、ng-repeatは利用できません –

関連する問題