2016-06-21 5 views

Antwort

2

Es gibt ein paar Dinge schief gehen hier:

  • Javascript ist Groß- und Kleinschreibung: Wenn Sie Ihre Immobilie cityname benannt ist, nicht, um es mit CityName
  • Ihre Ansichtsmodell verweisen kann, ist eine beobachtbare Array, das tut Habe keine CITIES Eigenschaft. Beachten Sie die Daten innerhalb des Viewmodel mit $data (foreach: $data), oder wickeln Sie das Array in einem Objekt (ko.applyBindings({CITIES: CITIES}))
  • Sie sollten nicht machen benutzerdefinierte Attribute, ohne sie voran mit data-

Eine korrigierte Version:

var CITIES = ko.observableArray([]); 
 

 
var viewmodel = { 
 
    CITIES: CITIES 
 
}; 
 

 
ko.applyBindings(viewmodel, document.getElementById("popupCityList")); 
 

 
var arr = []; 
 

 
arr.push({ 
 
    "cityname": "Mumbai", 
 
    "cityid": 1 
 
}); 
 

 
CITIES(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<div> 
 
    <ul id="popupCityList" data-bind="foreach: CITIES"> 
 
    <li data-bind="text: cityname"></li> 
 
    </ul> 
 
</div>

Zusätzliche Hinweise:

  • Sie können direkt zu einem beobachtbaren Array wechseln. Ie .: Sie brauchen nicht die arr, aber schreiben können viewmodel.CITIES.push({ /* ... */ })
  • Es ist eine gute Idee, einige Code-Konventionen in Bezug auf die Gehäuse Ihrer Variablennamen zu folgen.
+0

Sie die CityID und Städtename Attribut mit jedem li binded haben. – maverick

+0

Ich entfernte sie, weil sie kein gültiges HTML erzeugen: https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#global-attributes Sie würden arbeiten, wenn Sie die Eigenschaft machen Namen Kleinbuchstaben wie Ihre Stadt Daten. Ich rate ihnen, sie in 'data-cityid' und' data-cityname' umzubenennen. Ie .: 'attr: {'data-cityid': Stadt-ID, 'Daten-Stadtname': Stadtname}'. – user3297291

+0

Können Sie bitte diese Geige bearbeiten: - https://jsfiddle.net/8d1ut6u0/9/, um diese Datenattribute hinzuzufügen. Wenn ich sie addiere, sehe ich keine Ausgabe. Ich denke, ich mache es nicht richtig - es gibt einen Syntaxfehler. – maverick

0

var CITIES = ko.observableArray([]); 
 
// You are giving the wrong element 
 
ko.applyBindings(CITIES, document.getElementById("popupCityList")[0]); 
 
var arr = []; 
 
CITIES.push({ "cityname": "Mumbai", "cityid": 1 });
<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.1.0/knockout-min.js"></script> 
 

 
<select id="popupCityList" data-bind="options: CITIES, 
 
             optionsText: 'cityname', 
 
             value: 'cityid', 
 
             optionsCaption: 'Choose...'"></select>

Verwandte Themen