我目前正在使用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"的方法但仍然有同样的问题。
答案 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