2016-11-24 123 views
0

試圖學習和集成Knockout到ASP.NET Core應用程序。這是最遠的,我已經能夠按照不同的職位,以獲得: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包含所有正確的項目。
爲什麼Knockout只重複最後一個元素呢?我在文檔中無法找到的錯誤是什麼?

回答

1

您將需要創建的MonthViewModel一個新的實例,否則將this在每次調用,這使得最後MonthViewModel變化每個人都被覆蓋..

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

這裏是沒有剃刀東西提琴:http://jsfiddle.net/LkqTU/32570/

+0

非常感謝,我覺得自己像一個noob。它工作完美 –

-6

使用ng-repeat代替foreach,如果你在angularjs中這樣做。 您將在w3school中找到ng-repeat示例和語法。

+0

我不使用AngularJs,所以ng-repeat不適用於我 –