在 Meteor 反应变量上保存一个 class 实例

Save a class instance on a Meteor reactive var

我用一些方法创建了一个助手 class。所以我想将这个助手 class 实例存储在一个反应​​性变量中,以便在 html 模板中访问这个实例。 这可能吗?

export class APIArticle {

    constructor(articleObj){
        if( !_.isUndefined(articleObj) && !_.isNull(articleObj) && _.isObject(articleObj) ){
            this.articleObj = new ReactiveObject(articleObj);
        } else {
            throw "impossible creation!!!! Article-Object or ArticleId is required!";
        }
    }

getCurrencyCode() {
        if( _.isUndefined(this.currencyCode) || _.isNull(this.currencyCode) ){
            try{
                this.currencyCode = this.articleObj.sellPrice[0].money.currencyCode.toUpperCase();
            }catch(e){
                this.currencyCode = "EUR";
            }
        }
        return this.currencyCode
    }

}

这是我的简单 class。现在模板 Javascript.

Template.philosArticleCarousel.created = function(){
    let self = this;
    this.articleArray = new ReactiveArray();
    Meteor.call("articleList",function(err,succ){
        if(!err){
            self.articleArray.clear();
            _.each(succ,function(i){
                let apiArticle = new APIArticle(i);
                self.articleArray.push(apiArticle);
            });
        }
    });
};

Template.philosArticleCarousel.helpers({
    articleArray:() => { return Template.instance().articleArray.list(); }
});

this.getCurrencyCode 的每个循环中的模板中的访问为空。在将其打印为 JSON 时,我只看到字段,没有任何实例的迹象。

好吧,如果我使用一种传递原语的方法,一切都会好起来的。但这提供了一个对象,我如何访问它们?

我刚刚用您的代码对此进行了测试,一切正常:

<template name="hello">
  <ul>
    {{#each article in articleArray}}
      <li>{{article.articleObj.name}}</li>
    {{/each}}
  </ul>
</template>

当然我不得不做出一些假设,比如每个文章对象都有一个顶级名称 属性。

我什至测试了将 ReactiveArray 设为全局并添加新实例并修改底层 ReactiveObject。

你可以在这里看看我的例子:https://github.com/coagmano/Whosebug-48810966