Meteor:重复使用带有图表的模板-Div
Meteor: Reusing a Template With a Chart-Div
我正在使用一个模板 show,它实际上没有任何动态元素(还):
<template name="show">
<div class="row">
<div id="container-pie"></div>
</div>
</template>
我有一个侧边栏,它从我的数据库中提取并创建 <a>
个标签。
我呈现的回调具有绘制饼图的代码:
Template.show.rendered = function() {
var datum = this.data.visitors;
var keys = Object.keys(datum);
newAndReturningPie(keys[0], keys[1], datum.new, datum.returning);
}
(此数据是从 iron:router 中获取的)。
现在这是我需要帮助的地方(请注意边栏模板以供参考:)
<template name="sidebar">
<div class="ui left demo vertical inverted labeled sidebar menu">
<a class="item" href="{{pathFor 'root'}}">
<i class="home icon"></i>Home
</a>
{{#if anyProperties}}
{{#each this}}
<a href="{{pathFor 'property.show'}}" class="item">
{{name}}
</a>
{{/each}}
{{else}}
<a class="item">
<i class="settings icon"></i>No properties
</a>
{{/if}}
</div>
</template>
我为 #each
块中的每个对象使用相同的模板。问题是呈现的回调捕获了第一个对象的数据,并且将上下文切换到另一个对象实际上并没有重新加载或刷新页面。
如果我只使用一些 HTML 和 {{objectProperty}}
,那么我知道它会动态更新。但我没有使用任何空格键标签,只是一个包含图表的 div。
单击边栏中的 <a>
标签后,有什么简单、优雅的显示模板 re-render/reload 的方法?
更新:感谢@tarmes
这是我的工作代码:
Template.show.rendered = function() {
var self = this;
controller = Router.current();
self.autorun(function(){
var params = controller.getParams();
Meteor.call('selectedProperty', params._id, function(err, res){
if (!err) {
var datum = res.visitors;
var keys = Object.keys(datum);
newAndReturningPie(keys[0], keys[1], datum.new, datum.returning);
}
});
});
}
我所做的只是添加一个 Meteor 方法来通过 ID 在数据库中查询对象。
这样的事情怎么样:
Template.show.rendered = function() {
self = this;
controller = Router.current();
self.autorun(function() {
var params = controller.getParams(); // Reactive
var datum = self.data.visitors;
var keys = Object.keys(datum);
newAndReturningPie(keys[0], keys[1], datum.new, datum.returning);
});
}
每当控制器的参数发生变化时,自动运行都会重新运行(我假设如果路线中有 _id
等,它们会这样做),从而强制更新。
我正在使用一个模板 show,它实际上没有任何动态元素(还):
<template name="show">
<div class="row">
<div id="container-pie"></div>
</div>
</template>
我有一个侧边栏,它从我的数据库中提取并创建 <a>
个标签。
我呈现的回调具有绘制饼图的代码:
Template.show.rendered = function() {
var datum = this.data.visitors;
var keys = Object.keys(datum);
newAndReturningPie(keys[0], keys[1], datum.new, datum.returning);
}
(此数据是从 iron:router 中获取的)。
现在这是我需要帮助的地方(请注意边栏模板以供参考:)
<template name="sidebar">
<div class="ui left demo vertical inverted labeled sidebar menu">
<a class="item" href="{{pathFor 'root'}}">
<i class="home icon"></i>Home
</a>
{{#if anyProperties}}
{{#each this}}
<a href="{{pathFor 'property.show'}}" class="item">
{{name}}
</a>
{{/each}}
{{else}}
<a class="item">
<i class="settings icon"></i>No properties
</a>
{{/if}}
</div>
</template>
我为 #each
块中的每个对象使用相同的模板。问题是呈现的回调捕获了第一个对象的数据,并且将上下文切换到另一个对象实际上并没有重新加载或刷新页面。
如果我只使用一些 HTML 和 {{objectProperty}}
,那么我知道它会动态更新。但我没有使用任何空格键标签,只是一个包含图表的 div。
单击边栏中的 <a>
标签后,有什么简单、优雅的显示模板 re-render/reload 的方法?
更新:感谢@tarmes
这是我的工作代码:
Template.show.rendered = function() {
var self = this;
controller = Router.current();
self.autorun(function(){
var params = controller.getParams();
Meteor.call('selectedProperty', params._id, function(err, res){
if (!err) {
var datum = res.visitors;
var keys = Object.keys(datum);
newAndReturningPie(keys[0], keys[1], datum.new, datum.returning);
}
});
});
}
我所做的只是添加一个 Meteor 方法来通过 ID 在数据库中查询对象。
这样的事情怎么样:
Template.show.rendered = function() {
self = this;
controller = Router.current();
self.autorun(function() {
var params = controller.getParams(); // Reactive
var datum = self.data.visitors;
var keys = Object.keys(datum);
newAndReturningPie(keys[0], keys[1], datum.new, datum.returning);
});
}
每当控制器的参数发生变化时,自动运行都会重新运行(我假设如果路线中有 _id
等,它们会这样做),从而强制更新。