Domanda

Nella mia app Meteor ho il seguente gestore, restituire un record "collaboratore":

Template["IntroductionWizard_Step_1"].helpers({
  contributor: function(n) {
    return ContributorCollection.findOne({contributorName: ""});
  }
});
.

Questo record viene utilizzato in un modello reattivo:

<input type="text" id="name" name="name" class="form-control-element" value="{{contributor.contributorName}}" 
.

Come capisco, la ragione di questo modello di tracciare le modifiche a questo disco è perché è dovuta da una fonte reattiva. Quello che mi stavo chiedendo è se avrebbe avuto senso creare un oggetto attuale contributore e restituire quello invece di un solo record.Ma, se dovessi farlo, questo oggetto non sarebbe stato osservato per i cambiamenti, o lo farebbe? Un'altra parola, può essere utilizzato un approccio più tradizionale orientato agli oggetti con Meteor, con tali oggetti modello come osservabile e reattivo (Binding bidirezionali) come quelle registrazioni di raccolta?

È stato utile?

Soluzione

Puoi fare quello che vuoi - JavaScript è un prototipo basato, quindi è sufficiente ottenere il prototipo giusto e modificarlo.

Per migliorare il comportamento dell'elemento di raccolta, è necessario utilizzare il metodo transform:

Contributor = function(doc) {
  _.extend(this, doc); // initialize object with contents of doc
  ...
};

Contributors = new Meteor.Collection('contributors', {
  transform: function(doc) {
    return new Contributor(doc);
  },
});
.

Ora puoi aggiungere metodi al prototipo del contributore:

_.extend(Contributor.prototype, {
  someFunction: function() {...},
  otherFunction: function() {...},
  ...
});
.

Se si desidera regolare i metodi di raccolta, è anche più semplice:

Contributors._findOne = Contributors.findOne;

Contributors.findOne = function() {
  var contributor = Contributors._findOne.apply(this, arguments);
  if(!contributor) {
    // initialize and save new contributor
    ...
  }
  return contributor;
};
.

Con queste tecniche è possibile iniettare il comportamento desiderato per la raccolta e i suoi elementi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top