meteoro app - existe uma maneira de criar objetos observáveis
-
20-12-2019 - |
Pergunta
No meu meteoro, recomendo o seguinte manipulador, retornando um "colaborador" registro:
Template["IntroductionWizard_Step_1"].helpers({
contributor: function(n) {
return ContributorCollection.findOne({contributorName: ""});
}
});
Este registro está sendo usado em um reativa modelo:
<input type="text" id="name" name="name" class="form-control-element" value="{{contributor.contributorName}}"
Como eu entendo, o motivo para esta modelo para registar as alterações para que este registro é porque veio de um reativo de origem.O que eu queria saber é se ele poderia fazer sentido criar uma real Contribuinte objeto, e o retorno que, em vez de apenas um registro.Mas, se eu fosse fazer isso, este objeto não seria observado para as alterações, ou seria ele?Outra palavras, a mais tradicional abordagem orientada a objeto ser usado com meteoro, tendo como Modelo de objetos observáveis e reativa (duas vias de ligações) como os registros de Coleta?
Solução
Você pode fazer o que quiser – Javascript é um protótipo com base, por isso é o suficiente para obter o direito de protótipo e de modificá-lo.
Para melhorar o comportamento do elemento de coleção, você precisa usar transform
método:
Contributor = function(doc) {
_.extend(this, doc); // initialize object with contents of doc
...
};
Contributors = new Meteor.Collection('contributors', {
transform: function(doc) {
return new Contributor(doc);
},
});
Agora você pode adicionar métodos para o contribuinte do protótipo:
_.extend(Contributor.prototype, {
someFunction: function() {...},
otherFunction: function() {...},
...
});
Se você desejar ajustar os métodos de coleta, é ainda mais simples:
Contributors._findOne = Contributors.findOne;
Contributors.findOne = function() {
var contributor = Contributors._findOne.apply(this, arguments);
if(!contributor) {
// initialize and save new contributor
...
}
return contributor;
};
Com essas técnicas você pode injetar o comportamento desejado para a recolha e seus elementos.