Meteor App - есть ли способ создать наблюдаемые объекты

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

  •  20-12-2019
  •  | 
  •  

Вопрос

В моем приложении 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}}" 
.

Как я понимаю, причина этого шаблона для отслеживания изменений в этой записи заключается в том, что она пришла из реактивного источника. Что мне было интересно, имеет ли это ли смысл создать фактический объект вкладчика и вернуть это вместо просто записи.Но, если бы я должен был сделать это, этот объект не будет замечен для изменений или бы это? Другими словами, может использоваться более традиционный объектно-ориентированный подход с METEOR, имеющий такие модели объектов как наблюдаемые и реактивные (двусторонние привязки), как эти коллекции записи?

Это было полезно?

Решение

Вы можете делать все, что вы хотите - 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;
};
.

С этими методами вы можете ввести желаемое поведение для сбора и его элементов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top