2016-11-24 7 views
0

Versuch Knockout zu einer ASP.NET-Core-Anwendung zu erlernen und zu integrieren. Dies ist die am weitesten ich in der Lage gewesen, durch folgende verschiedene Beiträge zu erhalten:Foreach wiederholt nur letztes Element

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); 
}); 

Dann wird die Tabelle:

<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> 

Dieses korrekt erzeugt ein <tr> Element für die gleiche Anzahl von Elementen in dem Array, und das generierte HTML zeigt mir, dass tempDays alle richtigen Elemente hat.
Warum wiederholt Knockout nur das letzte Element? Was mache ich falsch, was ich in der Dokumentation nicht finden kann?

Antwort

1

Sie müssen eine neue Instanz von MonthViewModel schaffen, sonst hätte this bei jedem Aufruf überschrieben werden, die die letzte MonthViewModel Änderung jeder macht ..

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

Hier ist eine Geige ohne Razor Sachen : http://jsfiddle.net/LkqTU/32570/

+0

Vielen Dank, ich fühle mich wie ein Noob. Es hat perfekt funktioniert –

-6

Verwendung ng-repeat statt foreach wenn Sie tun dies in AngularJS. Sie finden das Beispiel und die Syntax von ng-repeat in w3school.

+0

Ich benutze keine AngularJs, also ist ng-repeat für mich nicht verfügbar –