js implémente un partage d'exemple de framework MVVM simple
Cet article partage principalement avec vous un exemple de framework MVVM simple implémenté en js. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Suivons l'éditeur pour y jeter un œil, j'espère que cela pourra aider tout le monde.
J'avais l'habitude de lire les articles dans le jardin en silence et de les aimer de manière obscène. Aujourd'hui, je vais également partager un framework mvvm simple que j'ai implémenté en utilisant js.
Au départ, je ne faisais que des événements de liaison automatique. Plus tard, j'ai découvert les méthodes d'implémentation de vue, knockout et argulaire, et en combinaison avec ma propre expérience dans la création de WPF, j'ai ajouté la liaison d'attributs. Aujourd'hui, je l'ai un peu amélioré. quelques fonctions et soumis le code au nuage de codes : https://gitee.com/zlj_fy/Simple-MVVM
Présentons brièvement l'utilisation :
<form class="form-horizontal" role="form" data-context="TestController"> <p class="form-group"> <legend>Form title</legend> </p> <p class="form-group"> <p class="col-sm-6 col-sm-offset-2"> <input type="text" class="form-control" bind-val="age,format=format" style="margin:5px 0" /> <input type="text" class="form-control" bind-val="desc" style="margin:5px 0" /> <input type="range" min="10" max="300" bind-val="age" step="10" class="form-control" style="margin:5px 0" /> <input type="button" class="btn btn-primary" value="更新" style="margin:5px 0" on-click="update" /> </p> </p> </form> <script> var TestController = { data: { name: 'xiaoming', age: 3, desc: function() { return this.name + ' likes looking little movie. he should take care of his body' } }, format: function(val) { return val + '岁' }, update: function() { this.name = 'this is a test' this.age = 18 } } $('body').controller() </script>
Définissons d'abord un contrôle. le contrôleur peut être un objet json ou une fonction, puis définissez data-context="[nom du contrôleur]" sur l'élément de niveau supérieur pour lier le contrôleur à tous les éléments sous le nœud. S'il existe un contrôleur imbriqué dans les descendants de l'élément, la portée des éléments enfants situés sous l'élément dans lequel il se trouve pointe vers le contrôleur enfant.
1. Attributs de surveillance et attributs complexes
Tous les attributs doivent être définis sous le nœud de données. Si les attributs à l'intérieur sont définis comme des fonctions, ils sont considérés comme des attributs complexes (tels que desc Complex). les attributs sont en lecture seule. Oui, une erreur sera générée si la valeur est réaffectée.
Le format lié à l'élément html : "{nom de l'attribut, fomat=[méthode du contrôleur]}", le nom de l'attribut prend en charge les attributs imbriqués, tels que (a.b) ; Si vous estimez que cela n'est pas nécessaire, vous pouvez utiliser des attributs complexes à la place. L'inconvénient actuel est que si l'entreprise est complexe, un grand nombre d'attributs complexes peuvent être générés ; à droite du nom de l'attribut se trouvent actuellement des paramètres facultatifs. il n'existe que le format, qui est la méthode de conversion des attributs à afficher en HTML.
2. Instruction
La syntaxe de l'instruction de liaison se présente sous la forme de bind-{instruction} Actuellement, seuls val, attr, text, html et template sont implémentés. On peut voir que les quatre premiers encapsulent simplement la méthode jqeury. Le modèle est implémenté à l'aide du plug-in jquery-tmpl. Si vous avez besoin de plus d'instructions, vous pouvez l'étendre vous-même. Il vous suffit d'implémenter la méthode de chargement initial init. (réception des paramètres d'observateur actuels) et méthode de mise à jour (description du paramètre : élément jquery correspondant, dernière valeur, instance de contrôleur actuelle) si vous étendez une instruction existante, celle d'origine sera écrasée par défaut ; Comme suit :
$.controller.addDirective("val", { init: function (observer) { if (observer.$ele.is('input,select')) { //监听onchange事件 observer.$ele.on('input propertychange', function () { var newVal = $(this).val() observer.writeValue(newVal) }) } }, update: function ($ele, newVal, controller) { $ele.val && $ele.val(newVal) } })
3. Événement
Syntaxe de l'événement de liaison : on-{event}="{controller method}, type=on/one", le côté droit du contrôleur la méthode est des paramètres facultatifs, actuellement uniquement le type de liaison on/one, la valeur par défaut est activée ; la méthode du contrôleur reçoit deux paramètres, l'un est le paramètre initial qui peut être défini sur l'élément correspondant à l'événement et l'autre est le paramètre d'événement d'événement. ;
<button type="button" class="btn btn-primary" data-page="1" on-click="refesh">查询</button>
4. Méthode
Utilisez directement ce nom d'attribut pour accéder directement aux attributs sous le nœud de données correspondant.
5. Hooks
init et créé. Init est après avoir surveillé tous les attributs et avant de compiler dom. Vous pouvez initialiser les paramètres sur cette méthode créée après la compilation des éléments dom.
Le contrôleur implémente par défaut la méthode d'héritage extend, qui peut hériter d'un autre contrôleur et doit être utilisée dans la méthode init. Actuellement, vous pouvez également utiliser l'héritage prototypique pour l'implémenter vous-même.
init: function () { this.extend(PageController) }, created: function () { //TODO },
6. Extension
Je crois que tout le monde aura un ensemble de composants communs lors de la réalisation de projets, ils peuvent donc être étendus comme suit. Par défaut, les composants correspondants sont montés sur. all control Sous l'exemple du contrôleur, vous pouvez l'appeler directement sous la méthode correspondante : this.http.post();
Cependant, il existe une suggestion qui consiste à essayer de pointer la portée de la méthode de rappel. au contrôleur autant que possible, afin que les problèmes de portée ne se produisent pas toujours lors du développement.
$.controller.extend({ utils: utils, notify: $.notify, modal: $.modal, http: $.http, alert: $.alert })
7. Principe et analyse du code (à suivre...)
L'ensemble du code js ne fait que plus de 300 lignes, la mise en œuvre est donc relativement simple, et de nombreux aspects ne sont pas pris en compte Oui, il y a encore certaines fonctions que je souhaite implémenter mais que je n'ai pas encore faites. Actuellement, la détection des changements de tableau et la mise à jour locale du DOM associé ne sont pas prises en charge.
Recommandations associées :
Présentez ce que sont respectivement MVC, MVP et MVVM
Qu'est-ce que l'architecture MVVM et la liaison de données ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'évaluation du rapport coût/performance du support commercial pour un framework Java implique les étapes suivantes : Déterminer le niveau d'assurance requis et les garanties de l'accord de niveau de service (SLA). L’expérience et l’expertise de l’équipe d’appui à la recherche. Envisagez des services supplémentaires tels que les mises à niveau, le dépannage et l'optimisation des performances. Évaluez les coûts de support commercial par rapport à l’atténuation des risques et à une efficacité accrue.

La courbe d'apprentissage d'un framework PHP dépend de la maîtrise du langage, de la complexité du framework, de la qualité de la documentation et du support de la communauté. La courbe d'apprentissage des frameworks PHP est plus élevée par rapport aux frameworks Python et inférieure par rapport aux frameworks Ruby. Par rapport aux frameworks Java, les frameworks PHP ont une courbe d'apprentissage modérée mais un temps de démarrage plus court.

Le framework PHP léger améliore les performances des applications grâce à une petite taille et une faible consommation de ressources. Ses fonctionnalités incluent : une petite taille, un démarrage rapide, une faible utilisation de la mémoire, une vitesse de réponse et un débit améliorés et une consommation de ressources réduite. Cas pratique : SlimFramework crée une API REST, seulement 500 Ko, une réactivité élevée et un débit élevé.

Selon les benchmarks, pour les petites applications hautes performances, Quarkus (démarrage rapide, mémoire faible) ou Micronaut (TechEmpower excellent) sont des choix idéaux. SpringBoot convient aux grandes applications full-stack, mais a des temps de démarrage et une utilisation de la mémoire légèrement plus lents.

La rédaction d'une documentation claire et complète est cruciale pour le framework Golang. Les meilleures pratiques incluent le respect d'un style de documentation établi, tel que le Go Coding Style Guide de Google. Utilisez une structure organisationnelle claire, comprenant des titres, des sous-titres et des listes, et fournissez la navigation. Fournit des informations complètes et précises, notamment des guides de démarrage, des références API et des concepts. Utilisez des exemples de code pour illustrer les concepts et l'utilisation. Maintenez la documentation à jour, suivez les modifications et documentez les nouvelles fonctionnalités. Fournir une assistance et des ressources communautaires telles que des problèmes et des forums GitHub. Créez des exemples pratiques, tels que la documentation API.

Choisissez le meilleur framework Go en fonction des scénarios d'application : tenez compte du type d'application, des fonctionnalités du langage, des exigences de performances et de l'écosystème. Frameworks Go courants : Gin (application Web), Echo (service Web), Fibre (haut débit), gorm (ORM), fasthttp (vitesse). Cas pratique : construction de l'API REST (Fiber) et interaction avec la base de données (gorm). Choisissez un framework : choisissez fasthttp pour les performances clés, Gin/Echo pour les applications Web flexibles et gorm pour l'interaction avec la base de données.

Dans le développement du framework Go, les défis courants et leurs solutions sont les suivants : Gestion des erreurs : utilisez le package d'erreurs pour la gestion et utilisez un middleware pour gérer les erreurs de manière centralisée. Authentification et autorisation : intégrez des bibliothèques tierces et créez un middleware personnalisé pour vérifier les informations d'identification. Traitement simultané : utilisez des goroutines, des mutex et des canaux pour contrôler l'accès aux ressources. Tests unitaires : utilisez les packages, les simulations et les stubs gotest pour l'isolation, ainsi que les outils de couverture de code pour garantir la suffisance. Déploiement et surveillance : utilisez les conteneurs Docker pour regrouper les déploiements, configurer les sauvegardes de données et suivre les performances et les erreurs avec des outils de journalisation et de surveillance.

Il existe cinq malentendus dans l'apprentissage du framework Go : une dépendance excessive à l'égard du framework et une flexibilité limitée. Si vous ne respectez pas les conventions du framework, le code sera difficile à maintenir. L'utilisation de bibliothèques obsolètes peut entraîner des problèmes de sécurité et de compatibilité. L'utilisation excessive de packages obscurcit la structure du code. Ignorer la gestion des erreurs entraîne un comportement inattendu et des plantages.
