نيزك التطبيق - هل هناك طريقة لإنشاء كائنات يمكن ملاحظتها

StackOverflow https://stackoverflow.com//questions/23000134

  •  20-12-2019
  •  | 
  •  

سؤال

في بلدي نيزك التطبيق لدي معالج التالية ، والعودة" مساهم " سجل:

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}}" 

كما أفهم ، فإن سبب هذا القالب لتتبع التغييرات على هذا السجل هو أنه جاء من مصدر تفاعلي.ما كنت أتساءل هو ما إذا كان من المنطقي إنشاء كائن مساهم فعلي ، وإرجاع ذلك بدلا من مجرد سجل.لكن, إذا كنت سأفعل ذلك, لن يتم ملاحظة هذا الكائن للتغييرات, أم أنه?كلمات أخرى, يمكن استخدام نهج وجوه المنحى أكثر تقليدية مع نيزك, وجود مثل هذه الكائنات نموذج كما يمكن ملاحظتها ورد الفعل (في اتجاهين الارتباطات) مثل تلك السجلات جمع?

هل كانت مفيدة؟

المحلول

يمكنك أن تفعل ما تريد-جافا سكريبت هو النموذج القائم ، لذلك يكفي للحصول على النموذج الصحيح وتعديله.

لتعزيز سلوك عنصر المجموعة ، تحتاج إلى استخدام 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;
};

مع هذه التقنيات يمكنك حقن السلوك المطلوب لجمع وعناصره.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top