Quand dois-je appeler la méthode startup() de par programme instancié widgets?
Je créer des instances de dijit.layout.ContentPane
, dijit.layout.StackContainer
et dijit.layout.BorderContainer
de mon code JS.
Il semble que je dois appeler le startup()
méthode par programmation instances.
Cependant, je ne suis pas sûr que je dois l'appeler pour chaque widget.
Par exemple, quand je fais un"new my.foo.widget()
", le startup()
est déclenché automatiquement.
Merci de m'aider à comprendre à quel moment appeler le startup()
méthode!
OriginalL'auteur Philippe | 2009-08-17
Vous devez vous connecter pour publier un commentaire.
de démarrage() est définie dans _Widget, et est tout simplement un "cadre de vie". C'est la dernière étape dans le widget du cycle de vie, et n'est pas requis par tous les widgets. Le cas le plus courant où il est absolument nécessaire, c'est quand programmant la création de mise en page des widgets. Il est utilisé comme un moyen de prévenir les calculs redondants lorsque les enfants ont besoin de dimensionnement. Par exemple, un BorderContainer.
De démarrage est appelé automatiquement par l'analyseur dans le cas de parseOnLoad:vrai ou de l'exécution manuelle. L'analyseur retards d'appel de démarrage() jusqu'à ce que tous trouvé widgets enfants ont été correctement instancié.
bibliothèque dijit.Dialogue est une étrange affaire. startup() DOIT être appelée sur ce widget.
La plupart des widgets ne nécessitent PAS de démarrage appelé, mais dans le cas où quelque chose de l'héritage de _Widget ne remplace pas le démarrage membre, l'appel est essentiellement un no-op réglage de ce paramètre._started = true; Si vous créez votre propre startup() de la fonction, vous devez appeler cette.héritée(arguments) ou tout simplement définir le _started déclencher manuellement.
Dans le Dojo 1.4, le cycle de vie ici a été légèrement ajustée. Auparavant, un widget avec widgetsInTemplate:true ferait appel de démarrage() sur les widgets enfants AVANT le démarrage() sur le parent. Dans la version 1.4, les enfants de démarrage() sera appelée APRÈS que la mère de démarrage(). Ce comportement est récursive, cependant, beaucoup de niveaux d'imbrication des widgets avec widgetsInTemplate:true sont instanciés.
Il est toujours "en sécurité" à l'appel .startup(), mais si vous "savez" (parce que c'est un simple point de terminaison de widget, ou de votre propre _Widget code), vous pouvez omettre l'appel.
OriginalL'auteur dante
Êtes-vous sûr qu'elle est appelée automatiquement ou avez-vous le code de votre widget qui l'appelle?
C'est une bonne pratique de l'appeler car il définit
_started
àtrue
qui est utilisé par un petit nombre de widgets pour déterminer le comportement et/ou de mise en page. La plupart des widgets exiger que vous l'appelez (comme vous l'avez vu).startup
est très utilisé par les widgets composés qui ont besoin de contrôle de la sous-widgets.En gros, tout ce qui hérite de
dijit._Widget
doit appeler de démarrage après l'instanciation.MODIFICATIONS:
Il y a un article sur SitePen à propos de la bibliothèque dijit du cycle de vie, qui traite de démarrage un peu dans l'article lui-même et dans les commentaires. C'est plus de deux ans et je pense que les choses ont changé.
La O'Reilly dojo livre parle aussi de démarrage, mais il dit qu'il doit être appelé sur containiner widgets. J'ai dû l'appeler sur la grille mais qui n'a pas de sens.
Il n'a pas vraiment de mal à quoi que ce soit par l'appelant (sauf si vous l'appelez avant que les enfants sont ajoutés à votre widget). Je dirais toujours l'appeler.
Hmm, vous avez raison. Pas tout à fait sûr pourquoi de démarrage n'est pas appelée sur cet exemple. J'ai juste toujours appelé hors de l'habitude.
OriginalL'auteur seth
Pour les widgets enfants déclarés dans le balisage, cette méthode déclenche automatiquement une fois que le widget et tous les widgets enfants ont été créés. En tant que tel, c'est le premier endroit sûr, que l'enfant d'un widget en toute sécurité de référence de l'enfant. Aussi simple que cela puisse paraître, cette tâche est souvent tenté de faire dans le postCreate, ce qui peut conduire à un comportement incohérent qui peut est difficile à détecter et à réparer. Pour par programme créé des widgets qui contiennent d'autres widgets enfants dans le cadre d'un a-une relation, vous devez manuellement appel de démarrage vous-même lorsque vous êtes sûr que tous les widgets enfants ont été créés. La raison que vous avez besoin de l'appeler pour vous-même créé par programmation de widgets contenant des enfants est parce qu'il ne serait pas judicieux de procéder à de dimensionnement et de rendu, à moins que tous les widgets enfants ont été ajoutées. (Sinon, il pourrait très bien être beaucoup de faux départs.) Cette méthode est la méthode la finale de stub que vous pouvez modifier pour personnaliser le comportement de se produire au cours de bibliothèque dijit construction.
OriginalL'auteur lasitha edirisooriya