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>

Der erste Tag wird verwendet, um ein Skript zu schießen den Kontakt zu entfernen, während die zweiten die jQuery cluetip verwendet eine Box auf schweben zu bringen (Details ausgelassen hier).

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.

War es hilfreich?

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

scroll top