2012-04-02 2 views
0

Ich habe eine Liste von Daten in einem ObservableArray und ich möchte es in einem Javascript-Dialogfenster zeigen (ich benutze jQuery.blockUI, wenn es darauf ankommt). Leider scheint der Dialog nach dem Laden der Seite nicht mehr verfügbar zu sein. Der Dialog wird korrekt initialisiert (die Daten werden angezeigt), aber er wird nicht mit Änderungen aktualisiert.Wie kann ich ein JavaScript-Dialogfeld mit Knockout binden?

Es gibt keine Javascript-Fehler und ich habe die Bindung verschoben, nachdem der Dialog generiert und dem Dokument hinzugefügt wurde (keine Auswirkung). Ich habe auch versucht, ko.applyBinding auf dem Haupt-div aufzurufen, das den Dialog ausmacht, aber aus irgendeinem Grund bewirkt, dass ein Teil der Hauptseite ausgeblendet wird (das DOM ist dort, aber sie sind versteckt).

EDIT: Ich habe ein Projekt auf jsfiddle erstellt, das das Problem reproduziert. Der Hauptschuldige scheint zu sein, den Inhalt des Dialogs in ein div zu verpacken. Wenn ich den Inhalt direkt zeige, scheint er zu funktionieren (natürlich kann ich das nicht, die Wrapper bieten einen gemeinsamen Stil für unsere Dialoge).

Ich erhole mich von der Grippe und könnte leicht etwas offensichtlich fehlen, aber ich habe den ganzen Tag versucht und nichts kommt zu mir. Irgendwelche Ideen?

+0

Können Sie ein Beispiel jsfiddle posten? – Tuan

+0

Ich konnte es nicht in jsFiddle reproduzieren, aber ich konnte feststellen, dass es etwas mit dem Dialog zu tun hat (obwohl ich wahrscheinlich etwas mache und nicht blockUI). Ich melde mich zurück, wenn ich eine bessere Antwort darauf habe. – Brian

Antwort

2

Das Problem besteht darin, dass der Dialog nicht im DOM existiert (trotz Ihres Aufrufs $(document).append(). Sie können ein div nicht als Kind des Dokuments selbst anhängen). Hängen Sie stattdessen den Dialog an den Körper an und verstecken Sie ihn.

$dlg = $('<div></div>').hide(); 
$('body').append($dlg); 

Arbeitet hier:http://jsfiddle.net/yL6ds/4/

+0

D'OH! Nur ein dummer Fehler :). Vielen Dank. Fast 8 Stunden vergeudet, grrr. Der Dialog-Code arbeitet seit über einem Jahr in der Produktion (das erste Mal mit Knockout) und ich habe nie gedacht, dass ich ihn überhaupt anschauen würde (komisch, dass ich ihn in jsFiddle reproduziert habe). – Brian