Problem mit Sys.UI.DataView und Javascript
-
16-09-2019 - |
Frage
Ich bin mit Microsoft Ajax, um dynamisch eine Liste der Kontakte zu füllen, ein json Paket gegeben. Mein Code ist wie folgt:
function fillContactsFromData(contacts) {
// this is just for debug to let me know that the data is correct
if (contacts.length > 0) {
alert('ID: ' + contacts[0].ID + ', Name: ' + contacts[0].Name);
}
$create(Sys.UI.DataView, { data: contacts }, null, null, $get('contacts'));
}
Die zugehörige HTML ist wie folgt:
<div id="contacts" class="sys-template">
<a onclick="removeContact('{{ ID }}');"><img src="remove.png" /></a>
<a class="contact" rel="/Contacts/Index/{{ ID }}">{{ Name }}</a><br />
</div>
Das Problem, das ich habe ist, dass der HTML nicht korrekt wiedergegeben wird. Was erzeugt wird, ist:
<div id="contacts">
<a><img src="remove.png" /></a>
<a class="contact" rel="/Contacts/Index/{{ ID }}">Darren Oster</a><br />
</div>
Das Warnfeld zeigt an Daten mit gültiger ID (GUID) und Namen ( "Darren Oster"). Der Name wird wird korrekt dargestellt, aber das ID-Feld wird in dem ‚rel‘ Attribute nicht gemacht, und die ‚Onclick‘ Anweisung wird vollständig entfernt.
Ist dies eine Einschränkung der MS Ajax oder mache ich etwas falsch?
Vielen Dank im Voraus.
Lösung
Wenn ein Attribut enthalten ist kein {{}} Ausdrücke muss der gesamte Wert sein.
Ja: foo = "{{ 'abc' + ID}}"
No: foo = "abc {{ID}}"
Wie bei Onclick nicht erzeugt wird, ist es wahrscheinlich, aber was auch immer Inspektion Sie verwenden Sie den Wert nicht angezeigt, da es mit einem direkten Satz von element.onclick gesetzt ist, nicht addAttribute ().
Andere Tipps
InfinitiesLoop mich setzen auf dem richtigen Weg, also hier ist die endgültige Antwort (falls jemand anderes folgt diesem Pfad) ...
Zuerst war ich mit einer früheren Vorschau von MS Ajax 4.0. Ich habe jetzt eine Vorschau 5, aktualisiert und die Dinge funktionieren etwas anders. Hier ist die endgültige HTML (die JavaScript ist unverändert):
<div id="contacts" class="sys-template">
<a sys:onclick="{{ 'removeContact(\'' + ID + '\');' }}"><img src="remove.png" /></a>
<a class="contact" sys:rel="{{ '/Contacts/Index/' + ID }}">{{ Name }}</a><br />
</div>
Beachten Sie auch, dass Vorschau 5 erfordert die ‚sys:‘ Präfix auf alle Attribute, die datengebundene Werte haben, so
<option value="{{ Value }}">{{ Text }}</option>
innerhalb eines
<option sys:value="{{ Value }}">{{ Text }}</option>