Meteorアプリ - 観測可能なオブジェクトを作成する方法はありますか
-
20-12-2019 - |
質問
My Meteorアプリでは、次のハンドラがあり、「寄稿者」レコードを返します。
Template["IntroductionWizard_Step_1"].helpers({
contributor: function(n) {
return ContributorCollection.findOne({contributorName: ""});
}
});
.
このレコードは反応テンプレートで使用されています:
<input type="text" id="name" name="name" class="form-control-element" value="{{contributor.contributorName}}"
.
私が理解しているように、このレコードへの変更を追跡する理由は、それが無効な源から来たためです。 私が疑問に思っていたのは、実際の貢献者オブジェクトを作成することを理解し、単なるレコードの代わりにそれを返すかどうかです。しかし、私がそれをするのであれば、このオブジェクトは変更のために観察されない、またはそれをするでしょうか? 別の単語、それらの収集レコードとして、観察可能で反応性(双方向バインディング)と同じようなモデルオブジェクトを持つ、より伝統的なオブジェクト指向アプローチを使用することができますか?
解決
あなたが望むものは何でもすることができます - JavaScriptはプロトタイプであるので、正しいプロトタイプを取得してそれを修正するのに十分です。
収集要素の動作を強化するには、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);
},
});
.
これで、コントリビュータのプロトタイプにメソッドを追加できます。
_.extend(Contributor.prototype, {
someFunction: function() {...},
otherFunction: function() {...},
...
});
.
収集方法を調整したい場合は、さらに簡単です。
Contributors._findOne = Contributors.findOne;
Contributors.findOne = function() {
var contributor = Contributors._findOne.apply(this, arguments);
if(!contributor) {
// initialize and save new contributor
...
}
return contributor;
};
.
これらの技術では、収集とその要素に目的の動作を注入できます。
所属していません StackOverflow