MeteorJS Blaze.getData()偶尔会返回undefined

时间:2015-06-14 23:18:59

标签: meteor meteor-blaze

我目前正在使用MeteorJS" renderWithData"在我的网页上渲染自举模式。在需要时加载每个模板的方法。

我遇到了一个问题,我的帮助方法使用" Blaze.getData()"来访问模态中的数据。偶尔会返回undefined,我不确定如何解决这个问题。

我能够复制问题的唯一方法是不断创建/销毁模态,并且似乎没有任何特定的问题。

以下是我采取的步骤:

1)我用适当的数据

实例化模态
Template.Courses.events({
'click .share-course': function (e,t) {
    var courseID = $(e.target).data('courseid');

    Template.instance().activeCourse.set(
        createModalWithData(
            {
                currentInstance: Template.instance().activeCourse.get(),
                template: Template.Enrollment_Generator,
                dataToRender: {courseID: courseID}
            }
        ));

    $('#generateEnrollmentURL').modal('show');
}
});

此外,这是" createModalWithData"的代码:

// Create a modal with a specific data context
// If modal template already exists, destroy
// and re-create with the new data context.
// If a location to render isn't specified, renders
// content in the body .
// Parameters: [Object] data { currentInstance : Template || null,
//                             template        : Template,
//                             dataToRender    : Object,
//                  (optional) location        : Element
// Return: Blaze Template Instance
createModalWithData = function createModalWithData(data) {

    // Ensure data exists
    if (_.isUndefined(data) || _.isNull(data)) {
        throw "data cannot be null or undefined";
    }

    // If modal already exists, destroy it
    if (!_.isNull(data.currentInstance)) {
        Blaze.remove(data.currentInstance);
    }

    // If location is undefined, set to page body
    if (_.isUndefined(data.location)) {
        data.location = document.body;
    }

    // Render modal with dataToRender
    return Blaze.renderWithData(data.template,
        data.dataToRender,
        data.location
    );
};

2)我尝试使用" Blaze.getData()"来检索数据。在我的模态模板中

Template.Enrollment_Generator.onCreated(function() {
    var courseID = Blaze.getData().courseID; // Occasionally undefined

    Meteor.subscribe('enrollment-codes',courseID);
});

到目前为止,我已尝试更换" onCreated"使用" onRendered"的方法但仍然有同样的问题。

1 个答案:

答案 0 :(得分:0)

事实证明问题出在点击事件中。我的共享课程按钮中有一个嵌套的span元素:

<small class="share-course" data-courseid="{{_id}}">
     Share
     <span class="glyphicon glyphicon-share"></span>
</small>

这搞乱了我的嵌入式课程ID

的方式

我应该使用Template.currentData()来检索模板中的数据,而不是Blaze.getData()

如上所述:https://forums.meteor.com/t/blaze-getdata-question/5688