유성 앱 - 관찰 가능한 객체를 만드는 방법이 있습니까?

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

  •  20-12-2019
  •  | 
  •  

문제

My Meteor App에서 다음과 같은 처리기가있어 "기고자"레코드를 반환합니다.

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