【发布时间】:2015-09-30 22:17:06
【问题描述】:
在我的第一个活动中,我将打开一个 mbox 对话框。 mbox 是 bootbox 的一种扩展,用于显示模态框。我需要 mbox 使用另一个模板作为模态内容。
所以在modal中会加载createElement-Template的内容。如果用户进行了一些输入更改,则应关闭模式。因此有函数modal("hide")。
但是由于bbox 是在第一个模板事件中设置的,并且模态的关闭将在第二个模板事件中完成,所以我在关闭模态时遇到了问题。
活动
Template.main.events({
'submit form': function(event, template) {
event.preventDefault();
var bbox = mbox.dialog({
title: 'title',
message: Template.createElement
});
}
});
Template.createElement.events({
'change input': function(event, template) {
bbox.modal('hide');
}
});
更新
上述问题适用于全局变量。感谢亚当。
但我不想破坏一个由另一个包创建的流星包中的模态。我尝试使用全局变量并尝试使用api.export()。但它仍然不起作用。我也尝试过使用 Sessions。
package-graph/lib/client/graph.js
var bbox;
CanvasManager = {
onShowAddToolTip (element) {
bbox = mbox.dialog({ // <-- Create Modal
title: "Title",
message: Template.search, // <-- Loading Template search with just one input field with typeahead
});
},
}
CanvasManger.create(...);
package-graph/lib/package.js
api.export('bbox');
第二个包提供了一个预先输入的搜索框 (sergeyt:typeahead)。通过在第一个包中创建模态,模板将被加载到模态(helloludger:mbox)中。现在用户可以通过 typeahead 搜索并选择一个项目。选择后模态应该被 `modal('hide') 销毁。
package-search/lib/client/events.js
Template.searchMain.onRendered(function() {
Meteor.typeahead.inject();
});
package-search/lib/client/helper.js
Template.search.helpers({ // <-- getting the data for the input typeahead
searchData: function() {
return [
{
name: 'cat1',
valueKey: 'title',
displayKey: 'title',
header: '<h3 class="category-name">Category</h3>',
template: 'searchResults',
local: function() {
return Collection.find().fetch();
}
}
]
},
selected: function(event, suggestion) { // <-- by selecting an item, I can process the data and remove the modal
// do something
bbox.modal('hide'); // <!-- destroy modal
return;
}
}
});
【问题讨论】:
-
您也可以发布 HTML 吗?在 Meteor 中,您可以通过 Template.instance() 共享和访问模板实例上的状态对象。
-
如果您删除 bbox 前面的 var,您应该能够跨文件访问它。尝试更改 var bbox;到 bbox = null;
标签: javascript meteor bootbox