2009-06-18 2 views
1

Ich erstelle Silverlight ohne Visual Studio. Ich habe nur Roh-HTML, XAML und Js (Javascript).Wie kann ich JavaScript-Funktionen aufrufen und Werte von XAML/Silverlight übergeben?

Was ich tun möchte, ist Werte von der XAML an das Javascript übergeben. Ich kann JavaScript-Funktionen von XAML aufrufen und aktivieren. Siehe unten. Das Element canvas hat ein Ereignis zum Aufrufen der linken Maustaste, das LandOnSpace im JavaScript aufruft.

Aber wie würde ich ShowMsg nennen? Genauer gesagt, wie würde ich diesem Aufruf Werte übergeben? Normalerweise in Javascript können Sie einfach gehen: ShowMsg (500, 700, "Sie schulden uns Geld");

Aber wenn ich das im Xaml-Code versuche, bricht es etwas. Ich glaube, es beklagt sich, dass die JavaScript-Funktion nicht existiert.

 <Canvas x:Name="btnLandOnSpace" Background="LightGreen" MouseLeftButtonUp="LandOnSpace" 
      Cursor="Hand" Canvas.Top ="0" Width="70" Height="50"> 
      <TextBlock Text="LandOnSpace" /> 
      </Canvas> 

function LandOnSpace(sender, e) { //on server 
if (!ShipAnimateActive && !blnWaitingOnServer) { 
    blnWaitingOnServer = true; 
    RunServerFunction("/sqgame/getJSLLandOnSpace"); 
     ShowWaitingBox(); 
     }; 
else { 
    alert('Waiting on server.'); 
}; 
} 



function ShowMsg(SintCost, SintRent , SstrChoiceText) { 
blnPayChoice = true;  
intCost = SintCost;  
intRent = SintRent;  
strChoiceText = SstrChoiceText; } 

+0

In Anbetracht all der Probleme, wäre es vorteilhaft für mich, anstelle von Silverlight zu Mondlicht zu wechseln? Ich könnte auch silverlight insgesamt aufgeben und google O3D zum Rendern verwenden. Es kann die 2d Sachen, die ich tun möchte, ziemlich leicht handhaben. – Neo42

+0

Ich habe auch mit dem Canvas-Tag aus HTML 5 gesucht. Dann wird meine Browser-Unterstützung für jeden Browser sein. IE unterstützt es anscheinend, auf die eine oder andere Weise. – Neo42

+0

Das ist interessant: http://blog.jimmy.schementi.com/2008/05/story-of-ruby-and-python-in-silverlight.html Es gibt etwas namens Chiron, die mir helfen könnte . – Neo42

Antwort

2

Wenn Sie JavaScript-Funktionen von Silverlight 2.0 aufrufen möchten, können Sie HtmlPage im System.Windows.Browser-Namespace verwenden.

var param = new object[] {"some parameter"}; 
HtmlPage.Window.Invoke("myfunc",param); 

auf Ihrem Beispiel jedoch basierend darüber, dass Sie Silverlight 1.0 verwenden scheint, wo Ihre Event-Handler in Javascript und nicht in C# oder VB.

Sie können zu Silverlight 2.0 wechseln. Der Server, den Sie für Serverseiten verwenden, hindert Sie nicht daran, Silverlight 2.0 (oder 3.0) zu verwenden. Sie können eine Silverlight 2.0-Anwendung in Google App Engine perfekt ausführen.

So starten Sie in 2.0 herunterladen Entwicklung der Silverlight-2-Tools hier: http://www.microsoft.com/downloadS/details.aspx?familyid=C22D6A7B-546F-4407-8EF6-D60C8EE221ED&displaylang=en

Und für einige Bezug auf, wie man kommuniziert zwischen der Silverlight-Code verwaltet und die Javascript im Browser können Sie diese Seite überprüfen: http://msdn.microsoft.com/en-us/library/cc645076(VS.95).aspx

+0

Wow. Ich habe ungefähr 3000 Zeilen Code bereits in meiner Javascript-Datei. Ich werde sehen, was ich tun kann, um es mit verwaltetem Code zu verbinden. Oder testen Sie zumindest verwalteten Code auf meiner Google App-Engine-Website. Und mein nächstes Projekt wird so beginnen. Mein Code ist bereits in 3 Sprachen, .JS, .XAML und Python. Ich bin mir nicht sicher, ob ich vb .net im Moment werfen sollte. Ich kenne vb, aber das Projekt hat einen langen Weg ohne es bisher geschafft. Ich werde irgendwann experimentieren. Vielen Dank. – Neo42

1

Der richtige Weg, dies zu tun, besteht darin, den js-Handler mit den Standardparametern auszulösen. Verwenden Sie dann das JavaScript-Modell Silverlight 1.0, um in das XAML zu navigieren. Siehe Silverlight 1.0 docs. Siehe die FindName-Methode.

+0

Das mache ich jetzt. Zum Beispiel ändere ich den Namen des xaml-Elements so, dass es die ID-Nummer enthält, die es übergeben hätte. Zum Beispiel würde ich x ändern: Name = "btnLandOnSpace" zu x: Name = "btnLandOnSpace05".Und das Javascript würde sender.name verwenden, um den Namen zu erhalten und zu analysieren. Ist es nicht möglich, Variablen direkt zu übergeben? Ich kann mir Szenarien vorstellen, in denen ich eine andere Variable mitnehmen möchte oder muss. Ich nehme an, ich könnte mehrere Werte in den Namen einbetten, aber das scheint chaotisch. – Neo42

+0

Es ist nicht wirklich möglich, die Werte direkt an den Handler zu übergeben, nein. Vor allem nicht während des Programmiermodells 1.0 (JS). Wenn du SL 2 mit Prism Commanding benutzt, warum dann, das ist eine andere Geschichte;) –

+0

Willst du damit sagen, dass ich Silverlight 2 nicht benutzen kann, wenn ich nur JS verwende? Ich hätte schwören können, dass ich die Silverlight 2-Funktionalität implementiert habe. Ich führe die Seite auf einer Google App-Engine-Seite aus, so dass ich leider, soweit ich weiß, nicht einfach zu .net wechseln kann. Ich habe alle Möglichkeiten getestet, wie ich Silverlight auf einem anderen Server implementieren kann. Ich war mir ziemlich sicher, dass ich einen .net 3.0 Server brauchte, um irgendeine andere Art von Silverlight-Seite zu hosten. Ist das richtig? Soll ich hier eine neue Frage stellen? – Neo42

Verwandte Themen