Ich versuche, eine Liste von Objekten (JSON) vom Server abzurufen, sie dann in einem Repeater rendern und einen Klick-Handler für jedes dieser Elemente zu haben vom übergeordneten Ansichtsmodell verarbeitet werden. Bisher habe ich:Aurelia: Rendern von Objekten, die vom Server im Repeater abgerufen werden, und Bindung an Eltern
/* list.html */
<template>
<require from="./components/player.html"></require>
<div>
<player repeat.for="p of players" containerless player-data.bind="p" dosth.call="dosth(p)"></player>
</div>
</template>
Dann wird der Spieler benutzerdefinierte Element:
/* player.html */
<template>
${playerData.name}
<button click.delegate="dosth()">DO STH</button>
<template>
Und der Spieler Modell:
/* player.ts */
import {customElement, bindable} from 'aurelia-framework';
@customElement('player')
export class PlayerModel {
@bindable playerData: any;
@bindable dosth;
bind(ctxt: any) {
console.log(ctxt);
}
}
Wenn ich Daten vom Server empfangen:
return this.http.fetch('players')
.then(response => response.json())
.then(players => {
for (let p of players) {
var model = new PlayerModel();
model.playerData = p;
this.players.push(model);
}
});
Wobei this.players
ein Array pr Opery im list.ts View-Modell.
Ich habe 2 Fragen:
- Meine
bind
Methode auf demPlayerModel
nicht ausgelöst wird - warum? - Ich kann die Dosth-Funktion nicht funktionieren. Ich bekomme 'Dosth' ist kein Funktionsfehler.
Kann mir jemand in die richtige Richtung zeigen?
Dank Fabio, ich bin fast da. Jetzt ist der letzte Teil (glaube ich), dass $ {playerData.name} nicht auf der Seite gerendert wird. Irgendwelche Hinweise dazu? Ich kann sehen, dass ich in PlayerModel.bin "this.player.player" überprüfen muss, um das playerData-Objekt zu erhalten. – andy250
Das liegt daran, dass Sie in Ihrer Funktion 'var model = new PlayerModel(); model.playerData = p; this.players.push (Modell); '. Sie sollten so etwas tun: 'let model = new PlayerModel (p); this.players.push (model); ' –
Oder vielleicht' player-data.bind = "p.playerData" ' –