2009-06-18 6 views
1

Je crée Silverlight sans Visual Studio. J'ai juste le HTML brut, XAML, et js (javascript).Comment puis-je appeler des fonctions javascript et passer des valeurs à partir de XAML/Silverlight?

Ce que je veux faire est de passer des valeurs du XAML au javascript. Je peux appeler et activer les fonctions javascript à partir de XAML. Voir ci-dessous. L'élément canvas a un événement bouton gauche de la souris qui appelle LandOnSpace dans le javascript.

Mais comment j'appellerais ShowMsg? Ou plus exactement, comment pourrais-je transmettre des valeurs à cet appel? Normalement, en javascript, vous pouvez simplement aller: ShowMsg (500, 700, "vous nous devez de l'argent"); Mais quand j'essaye ça dans le code xaml, ça casse quelque chose. Je crois qu'il se plaint que la fonction javascript n'existe pas.

 <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

Compte tenu de tous les problèmes, serait-il bénéfique pour moi de passer au clair de lune au lieu de Silverlight? Je pourrais également abandonner complètement Silverlight et utiliser O3D de Google pour le rendu. Il peut gérer les choses 2D que je veux faire, assez facilement. – Neo42

+0

J'ai également cherché à utiliser le tag Canvas de HTML 5. Ensuite, le support de mon navigateur sera chaque navigateur. IE le soutient apparemment, d'une manière ou d'une autre. – Neo42

+0

Ceci est intéressant: http://blog.jimmy.schementi.com/2008/05/story-of-ruby-and-python-in-silverlight.html Il y a quelque chose qui s'appelle chiron qui pourrait m'aider . – Neo42

Répondre

2

Si vous souhaitez appeler des fonctions javascript à partir de Silverlight 2.0, vous pouvez utiliser HtmlPage dans l'espace de noms System.Windows.Browser.

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

Cependant en fonction de votre exemple ci-dessus, il semble que vous utilisez Silverlight 1.0 où votre gestionnaire d'événements est en Javascript et non en C# ou VB.

Vous pouvez passer à Silverlight 2.0. Le serveur que vous utilisez pour les pages du serveur ne vous empêche pas d'utiliser Silverlight 2.0 (ou 3.0). Vous pouvez parfaitement exécuter une application Silverlight 2.0 sur Google App Engine.

Pour commencer à développer en 2.0 télécharger Silverlight 2 Outils ici: http://www.microsoft.com/downloadS/details.aspx?familyid=C22D6A7B-546F-4407-8EF6-D60C8EE221ED&displaylang=en

Et pour une référence sur la façon de communiquer entre le code managé Silverlight et le Javascript dans le navigateur, vous pouvez consulter cette page: http://msdn.microsoft.com/en-us/library/cc645076(VS.95).aspx

+0

Wow. J'ai déjà environ 3000 lignes de code dans mon fichier javascript. Je vais voir ce que je peux faire pour commencer à le connecter au code managé. Ou au moins tester un peu de code managé sur mon site google app engine. Et mon prochain projet commencera comme ça. Mon code est déjà en 3 langues, .JS, .XAML et Python. Je ne suis pas sûr que je devrais lancer vb .net pour le moment. Je connais vb, mais le projet a fait beaucoup de chemin jusqu'à maintenant. Je vais expérimenter à un moment donné. Je vous remercie. – Neo42

1

La bonne façon de faire est de déclencher le gestionnaire js avec les paramètres par défaut. Ensuite, à partir de Javascript, utilisez le modèle Silverlight 1.0 pour naviguer dans le XAML. Voir le Silverlight 1.0 docs. Voir la méthode FindName.

+0

C'est ce que je fais maintenant. Par exemple, je change le nom de l'élément xaml pour inclure le numéro d'identification qu'il aurait passé. Par exemple, je remplacerais x: Name = "btnLandOnSpace" par x: Name = "btnLandOnSpace05".Et le javascript utiliserait sender.name pour obtenir et analyser le nom. N'est-il pas possible de passer directement des variables? Je peux penser à des scénarios où je voudrais ou dois passer une autre variable avec elle. Je suppose que je pourrais intégrer plusieurs valeurs dans le nom, mais cela semble désordonné. – Neo42

+0

Il n'est pas vraiment possible de passer les valeurs directement au gestionnaire, non. Surtout pas en utilisant le modèle de programmation 1.0 (JS). Si vous utilisez SL 2 avec Prism Commandant, pourquoi alors, c'est une histoire différente;) –

+0

Êtes-vous en train de dire que je ne peux même pas utiliser Silverlight 2 en utilisant seulement JS? J'aurais juré que j'avais implémenté la fonctionnalité Silverlight 2. Je cours la page sur un site moteur google app, donc je ne peux pas simplement passer à .net, malheureusement, autant que je sache. J'ai testé toutes les façons de mettre en œuvre Silverlight sur un serveur différent. J'étais sûr que j'avais besoin d'un serveur .net 3.0 pour héberger n'importe quel autre type de page Silverlight. Est-ce correct? Devrais-je commencer une nouvelle question là-dessus? – Neo42

Questions connexes