Maison  >  Article  >  interface Web  >  ## Modèles de vue Knockout : littéraux d'objet et fonctions – Quel est le meilleur ?

## Modèles de vue Knockout : littéraux d'objet et fonctions – Quel est le meilleur ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 10:04:02269parcourir

## Knockout View Models: Object Literals vs. Functions - Which is Better?

Objets et fonctions pour déclarer des modèles de vue Knockout

Dans Knockout JS, les modèles de vue peuvent être déclarés sous forme de littéraux d'objet ou de fonctions. Considérez les exemples suivants :

// Object literal
var viewModel = {
    firstname: ko.observable("Bob")
};

ko.applyBindings(viewModel );
// Function
var viewModel = function() {
    this.firstname= ko.observable("Bob");
};

ko.applyBindings(new viewModel ());

Bien que les deux approches atteignent le même objectif, définir des modèles de vue en tant que fonctions offre plusieurs avantages :

Accès direct à « ceci »

Au sein d'une fonction, « ceci » fait référence à l'instance en cours de création. Cela permet un accès facile aux observables et aux propriétés calculées du modèle de vue :

var ViewModel = function(first, last) {
  this.first = ko.observable(first);
  this.last = ko.observable(last);
  this.full = ko.computed(function() {
     return this.first() + " " + this.last();
  }, this);
};

En revanche, lors de l'utilisation de littéraux d'objet, une liaison de contexte explicite est requise dans les observables calculés :

var viewModel = {
   first: ko.observable("Bob"),
   last: ko.observable("Smith"),
};

viewModel.full = ko.computed(function() {
   return this.first() + " " + this.last();
}, viewModel);

Encapsulation et confidentialité des variables

Les fonctions fournissent une encapsulation plus naturelle pour les modèles de vue, car elles peuvent définir des variables privées qui ne sont pas exposées à la portée globale. Cela permet d'éviter les écrasements accidentels ou les conflits.

var ViewModel = function() {
    var self = this;
    this.items = ko.observableArray();
    this.removeItem = function(item) {
         self.items.remove(item);
    }
};

Enfin, les fonctions permettent une liaison facile à l'aide de la méthode 'bind', garantissant ainsi le contexte correct pour les fonctions de rappel :

var ViewModel = function() {
    this.items = ko.observableArray();
    this.removeItem = function(item) {
         this.items.remove(item);
    }.bind(this);
};

En résumé , bien que les deux méthodes de définition des modèles de vue Knockout soient valides, l'utilisation de fonctions offre une plus grande flexibilité, un meilleur contrôle et des avantages d'encapsulation. Ces avantages font des fonctions un choix privilégié pour les modèles de vue plus complexes et maintenables.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn