在模板中共享数据

时间:2016-04-08 17:05:28

标签: javascript meteor

我有一个名为exercise的模板。模板exercise只从db。订阅了一个练习(数据)。

我正在构建触控打字应用程序。模板exercise是用户写下准备好的文本的一部分。

这个模板会非常复杂。

我需要一些额外的逻辑,所以我创建了类ExerciseText

目标是:我需要在模板助手和模板exerciseText的事件中共享对象exercise。我需要该对象exerciseText在模板exercise的实时时间内具有某种状态。

我在Sacha's article

的帮助下编写了我的代码

它有效,但这是一个好模式吗?谢谢你的任何想法。

ExerciseText.js

"use strict";

export default class ExerciseText {
    constructor(exercise) {
        this.text = exercise.text;
    }

    get getText() {
        return this.text.split('');
    }

    // many logic wow
}

exercise.js

"use strict";

import ExerciseText from '../../../imports/api/client/ExerciseText.js';

Template.exercise.helpers({
    exercise: () => {
        if (Template.instance().subscription.ready()) {
            return Template.instance().exercise;
        }
    },
    text: () => {
        if (Template.instance().subscription.ready()) {
            return Template.instance().exerciseText.getText;
        }
    }
});

Template.exercise.onCreated(()=> {
    var instance = this;
    instance.autorun(() => {
        var params = Router.current().params;
        var lessonUrl = params.lessonUrl;
        var exerciseOrder = parseInt(params.rank);

        instance.subscription = instance.subscribe('exercise', lessonUrl, exerciseOrder);
        if (instance.subscription.ready()) {
            var lesson = Lessons.findOne() || {};
            if (lesson.hasOwnProperty('exercises')) {
                // lesson has only one published exercise
                // there si only one element in that array
                instance.exercise = lesson.exercises[0];
                instance.exerciseText = new ExerciseText(instance.exercise);
            }
        }
    });
});

0 个答案:

没有答案