Javascript meteor:在特定上下文中呈现模板
我有两个模板Javascript meteor:在特定上下文中呈现模板,javascript,meteor,Javascript,Meteor,我有两个模板 <body> {{>tmpl1}} {{>tmpl2}} .... </body> tmpl1显示如下 <template name="tmpl1"> {{#each items}} {{title}} {{/each}} .... </template> 关于如何将tmpl1中的选定项与tmpl2链接的任何建议?首先,将模板放入容器中,以便可以操作上下文
<body>
{{>tmpl1}}
{{>tmpl2}}
....
</body>
tmpl1
显示如下
<template name="tmpl1">
{{#each items}}
{{title}}
{{/each}}
....
</template>
关于如何将
tmpl1
中的选定项与tmpl2
链接的任何建议?首先,将模板放入容器中,以便可以操作上下文。另外,将详细信息模板放在一个带有上下文的#中:
<template name="box">
{{> list}}
{{#with item}}
{{> details}}
{{/with}}
</template>
编写处理程序:
Template.box.events({
'click .listItem': function(e, t) {
t.data.itemId = $(e.target).data('id');
t.data.itemDep.changed();
}
});
最后,为所选项目创建数据帮助器和依赖项:
Template.box.created = function() {
this.data.itemDep = new Deps.Dependency();
};
Template.box.item = function() {
this.itemDep.depend();
return Items.findOne(this.itemId);
};
首先,将模板放入容器中,以便可以操纵上下文。另外,将详细信息模板放在一个带有上下文的#中:
<template name="box">
{{> list}}
{{#with item}}
{{> details}}
{{/with}}
</template>
编写处理程序:
Template.box.events({
'click .listItem': function(e, t) {
t.data.itemId = $(e.target).data('id');
t.data.itemDep.changed();
}
});
最后,为所选项目创建数据帮助器和依赖项:
Template.box.created = function() {
this.data.itemDep = new Deps.Dependency();
};
Template.box.item = function() {
this.itemDep.depend();
return Items.findOne(this.itemId);
};
首先,将模板放入容器中,以便可以操纵上下文。另外,将详细信息模板放在一个带有上下文的#中:
<template name="box">
{{> list}}
{{#with item}}
{{> details}}
{{/with}}
</template>
编写处理程序:
Template.box.events({
'click .listItem': function(e, t) {
t.data.itemId = $(e.target).data('id');
t.data.itemDep.changed();
}
});
最后,为所选项目创建数据帮助器和依赖项:
Template.box.created = function() {
this.data.itemDep = new Deps.Dependency();
};
Template.box.item = function() {
this.itemDep.depend();
return Items.findOne(this.itemId);
};
首先,将模板放入容器中,以便可以操纵上下文。另外,将详细信息模板放在一个带有上下文的#中:
<template name="box">
{{> list}}
{{#with item}}
{{> details}}
{{/with}}
</template>
编写处理程序:
Template.box.events({
'click .listItem': function(e, t) {
t.data.itemId = $(e.target).data('id');
t.data.itemDep.changed();
}
});
最后,为所选项目创建数据帮助器和依赖项:
Template.box.created = function() {
this.data.itemDep = new Deps.Dependency();
};
Template.box.item = function() {
this.itemDep.depend();
return Items.findOne(this.itemId);
};
Hrm,您是否尝试过tmpl2的点击事件,该事件通过Meteor.call()从tmpl1获取数据子集?或者tmpl2中的把手助手,每当tmpl1-中的meteor会话发生更改时,该助手会反应性地加载?不,流星对我来说是很新的。因此,从您的建议来看,在项上
单击我将在会话
上放置一些东西,tmpl2
将检索并显示这些东西?不要出于这种目的使用会话
:它相当于一个好的旧全局变量。改为使用模板数据-参见下面我的答案。Hrm,您是否尝试过tmpl2的点击事件,该事件执行Meteor.call()从tmpl1获取数据子集?或者tmpl2中的把手助手,每当tmpl1-中的meteor会话发生更改时,该助手会反应性地加载?不,流星对我来说是很新的。因此,从您的建议来看,在项上
单击我将在会话
上放置一些东西,tmpl2
将检索并显示这些东西?不要出于这种目的使用会话
:它相当于一个好的旧全局变量。改为使用模板数据-参见下面我的答案。Hrm,您是否尝试过tmpl2的点击事件,该事件执行Meteor.call()从tmpl1获取数据子集?或者tmpl2中的把手助手,每当tmpl1-中的meteor会话发生更改时,该助手会反应性地加载?不,流星对我来说是很新的。因此,从您的建议来看,在项上
单击我将在会话
上放置一些东西,tmpl2
将检索并显示这些东西?不要出于这种目的使用会话
:它相当于一个好的旧全局变量。改为使用模板数据-参见下面我的答案。Hrm,您是否尝试过tmpl2的点击事件,该事件执行Meteor.call()从tmpl1获取数据子集?或者tmpl2中的把手助手,每当tmpl1-中的meteor会话发生更改时,该助手会反应性地加载?不,流星对我来说是很新的。因此,从您的建议来看,在项上
单击我将在会话
上放置一些东西,tmpl2
将检索并显示这些东西?不要出于这种目的使用会话
:它相当于一个好的旧全局变量。改用模板数据-见下面我的答案。我还没有完全掌握依赖对象是如何伴随数据值的,但我喜欢干净的方法。很好的解决方案。此刻,我正试图让这个想法发挥作用。我现在正在努力解决的一件事是this.data===undefined
。有什么建议吗?我看到了这个===window
。另外,如果我用一种方法定义this.data,它在另一种方法中就消失了:(然而,当我在Template.box.data
上定义data
对象时,它就起作用了。我是不是遗漏了什么?@gamengineers:很简单,依赖对象可以用来跟踪任何你想要的变化,你只需要1)调用dep.changed()
无论何时更改跟踪对象值,以及dep.dependen()
在值更改时应更新的被动位置。在这种情况下,我只是创建一个任意依赖项对象来跟踪项
值,并将其本地存储在模板数据中。@JeanlucaScaljeri:我不完全理解为什么会发生这种情况,如果您通过定义template.data.box
让它工作,那就太好了。我记得,这在某种程度上取决于模板的调用方式,也就是说,您是在顶层调用{{>template}
,还是在{{{{each}}
或{{with}
块中调用,还是通过template.template()
调用。我还没有完全掌握依赖对象是如何伴随数据值的,但我喜欢干净的方法。很好的解决方案。此刻,我正试图让这个想法发挥作用。我现在正在努力解决的一件事是this.data===undefined
。有什么建议吗?我看到了这个===window
。另外,如果我用一种方法定义this.data,它在另一种方法中就消失了:(然而,当我在Template.box.data
上定义data
对象时,它就起作用了。我是不是遗漏了什么?@gamengineers:很简单,依赖对象可以用来跟踪任何你想要的变化,你只需要1)调用dep.changed()
无论何时更改跟踪对象值,以及dep.dependen()
在值更改时应更新的被动位置。在这种情况下,我只是创建一个任意依赖项对象来跟踪项
值,并将其本地存储在模板数据中。@JeanlucaScaljeri:我不完全理解为什么会发生这种情况,如果您通过定义template.data.box
让它工作,那就太好了。我重唱