2016-12-09 5 views
0

Ich habe eine beobachtbare Array AllItems alsHerstellung KnockOut beobachtbaren Array-Eigenschaft beobachtbaren

definiert
var ViewModel = function() { 
    var self = this; 
    self.AllItems = ko.observableArray([]); 
} 

Es von Daten von einem Ajax-Aufruf gefüllt wird und ich nur hinzufügen, die Eigenschaften von dem Ajax-Aufruf, die direkt an das Array ohne zu definieren, Sie.

ich es in der folgenden HTML verwenden eine Tabelle zu füllen.

var ViewModel = function() { 
 
    var self = this; 
 
    self.AllItems = ko.observableArray([]); 
 
} 
 
$(document).ready(function() { 
 
    ko.applyBindings(new ViewModel()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.1/knockout-min.js"></script> 
 
<table> 
 
    <tbody data-bind="foreach: AllItems"> 
 
    <td> 
 
     <span>$</span><span data-bind="text: $data.RequestedPrice"></span> 
 
    </td> 
 

 
    <!-- ko ifnot: (Number(RequestedPrice) > Number(ItemDetails.SmPrice)) --> 
 
    <input type="button" disabled value="Approve" id="Approved" data-bind="click: $root.ApproveItem" style="background-color:#e1eae5 !important" /> 
 
    <!-- /ko --> 
 
    <!-- ko ifnot: (Number(RequestedPrice) > Number(ItemDetails.SmPrice)) --> 
 
    <input type="button" disabled value="Approve" id="Approved" data-bind="click: $root.ApproveItem" style="background-color:#e1eae5 !important" /> 
 
    <!-- /ko --> 
 

 
    <nobr>$ 
 
     <input type="text" class="priceChange" onkeypress="return isNumberKey(event)" style="display:inline !important" data-bind="value: $data.RequestedPrice" /> 
 
    </nobr> 
 
    </tbody> 
 
</table>

so habe ich drei Dinge in der obigen HTML. Zuerst zeige ich nur den Text des gewünschten Preises. Zweitens benutze ich es um eine Schaltfläche zu deaktivieren und drittens mache ich es zu einem bearbeitbaren Feld.

Das Problem ist, dass, wenn ich den Wert zu ändern es nicht im Text reflektiert wird und auch der zweite Fall, in dem es verwendet wird, eine Taste zu deaktivieren, wird nicht aktualisiert. Kann mir bitte jemand sagen, was ich dafür brauche.

+0

Bitte fügen Sie alle Teile, die Sie Ansichtsmodell in den Bindungen in der HTML verwenden. Fügen Sie auch Scheindaten hinzu. – connexo

+2

Warum haben Sie genau die gleiche Taste zweimal? Fixiere deine HTML-Struktur, sie ist komplett ungültig. – Tomalak

Antwort

0

drei Optionen:

  • eine benutzerdefinierte Zuordnung von Ihrem js schreiben (on) von dem hinteren Ende zu Objekten kommen, die beobachtbaren Eigenschaften zu tun haben;
  • Verwendung ko.mapping;
  • Verwenden knockout.es5 mit einigen benutzerdefinierten Code;

Knockout, Oppossed zu Angular 1, erfordert, dass Sie standardmäßig explizit zu sein über die stopfen Sie beobachtbar sein wollen (wenn ko.mapping verwenden sind Sie ausdrücklich sagen, all die Dinge zu beobachten ist).

Verwandte Themen