我正在尝试将流星与另一个 JS 框架集成。在最新的 Blaze 升级(即 0.8 之前的版本)之前,我的工作相当顺利。为了让它工作,我需要将流星模板呈现为 HTML 字符串。此外,我需要能够提供一个数据对象来为模板中包含的变量提供值。
在 0.8 之前,我可以简单地执行以下操作:
var myTemplateName = 'someTemplateName';
var myTemplateVariableData = {myTemplateVariableData: {'xxx': 'some data}};
var myTemplateHTML = Template[myTemplateName].render(myTemplateVariableData);
当然,这不再有效。但是,我不得不认为即使在 0.8 之后仍有一些方法可以做到这一点。我已经非常接近以下内容:
var myTemplateVariableData = {'xxx': 'some data};
var templateName = 'someTemplateName';
var myTemplateHTML = "";
var dr = new UI.DomRange; // domain range
var loadedTemplate = Template[templateName].extend(
{
data: function () {
return { myTemplateVariableData: myTemplateVariableData }
}
}
);
var renderedTemplate = loadedTemplate.render();
UI.materialize(renderedTemplate, dr, null, dr.component);
for (var member in dr.members) {
if (dr.members.hasOwnProperty(member)) {
var testHTML = dr.members[member].innerHTML;
if (testHTML) {
myTemplateHTML = myTemplateHTML + testHTML
} else {
myTemplateHTML = myTemplateHTML + dr.members[member].textContent
}
}
}
这种尝试结果的问题是,如果我尝试这样的事情:
{{#if myTemplateVariableData.xxx}}<span> {{myTemplateVariableData.xxx}}</span>{{/if}}
我会显示跨度,但除了 之外没有其他内容。似乎在 if 块内时,它会丢失上下文并且不再看到“this”对象上的 myTemplateVariableData 属性。
我怀疑有一种更简单的方法可以完成我在这里尝试做的事情,但我目前没有想法,所以我想我会在这里发布这个,看看是否有其他人尝试过类似的事情。