APP METEOR - C'è un modo per creare oggetti osservabili
-
20-12-2019 - |
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?
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.