Question

Je veux faire une fonction qui ajoute un élément à mon objet localStorage. Par exemple:.

alert(localStorage.getItem('names').addItem('Bill').getItem('names'));

La première méthode est getItem qui obtient l'élément pour les objets localStorage ... mais addItem serait une fonction personnalisée. Cette chaîne de fonctions serait finalement le projet de loi d'alerte.

Alors, comment cette chaîne de fonctions que j'apporter à localStorage?

Était-ce utile?

La solution

Ceci est possible si vous créer un objet wrapper / décorateur qui rend possible l'enchaînement. Voilà comment fonctionne jQuery par exemple. Mais il est inutile dans ce cas .

J'ai fait une mise en œuvre possible, cependant.

getItem va briser la chaîne (il doit toujours être utilisé à la fin).

storage().setItem('names', 'Bill').getItem('names'); // or
storage().setItem('names').addItem('Bill').getItem('names'); // or
storage().key('names').value('Bill').set().get('names');

Mise en œuvre

(function( window, undefined ) {

var storage = function( key, value ) {
  return new storage.init( key, value );
};

storage.init = function( key, value ) {
  this._key   = key;
  this._value = value;
};

storage.init.prototype = {

  key: function( key ) {
    this._key = key;
    return this;
  },

  value: function( value ) {
    this._value = value;
    return this;
  },

  get: function( key ) {
    key = isset(key) || this._key;
    return localStorage.getItem( key );
  },

  set: function( key, value ) {
    this._key   = key   = isset(key)   || this._key;
    this._value = value = isset(value) || this._value;
    if ( key && value ) {
      localStorage.setItem( key, value );
    }
    return this;
  },

  addItem: function( value ) {
    this._value = isset(value) || this._value;
    if ( this._key && value !== undefined ) {
      localStorage.setItem( this._key, value );
    }
    return this;
  },

  // aliases...
  getItem: function( key ) {
    return this.get( key );
  },
  setItem: function( key, value  ) {
    return this.set( key, value );
  }
};

function isset( value ) {
  return value !== undefined ? value : false;
}

window.storage = storage;

})( window );

Autres conseils

Ceci est impossible.

Si retourne getItem('names') Bill, vous ne pouvez pas appeler addItem là-dessus.
Il serait possible d'ajouter des méthodes de addItem et getItem à chaque élément dans le stockage, mais ce serait une horribles idée.

serait de ne pas faire la chose la plus simple du tout:)

Si cela ne fonctionne pas, il existe des solutions telles que la modification de la fonction native de getItem mais c'est une très mauvaise idée. La meilleure façon serait d'écrire un wrapper autour localStorage, un peu comme ce que jQuery fait aux noeuds DOM, et utiliser cette enveloppe pour obtenir et articles mis dans le stockage local. L'enveloppe pourrait avoir une interface comme:

ApplicationStorage
    getItem()
    setItem()
    key()
    removeItem()

définir ensuite des emballages de type acceptable comme Array au sein de ApplicationStorage qui ont des méthodes telles que addItem

ApplicationStorage.Array
    addItem()

Quand applicationStorage.getItem("names") est appelé, retourne un objet de ApplicationStorage.Array qui contient la méthode addItem qui fera chaîner possible.

getItem('names').addItem('Bill').getItem('names')

Je suis confus, comment obtenez-vous un élément qui n'a pas été ajouté ???

getItem renvoie un objet contient de l'addItem, et la méthode addItem renvoie un objet contient de l'getItem

Quoi qu'il en soit, jetez un oeil le tutoriel suivant. Il ne résout pas complètement le problème, mais vous donnera une idée.

http://guanfenglin.spaces.live.com/blog /cns!4E0822BF6C959B7F!668.entry

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top