<template name="SideNav">
<ul class='block-items white'>
{{#each blocks}}
<li class='block-item'>
<i class="fa fa-fw fa-folder"></i>
<i class="fa fa-fw fa-folder-open"></i>
<a href='#' class='block-item-link'>
{{name}}
...
{{/each blocks}}
</template>
鉴于此,我可以通过点击
来访问每个块项id
Template.SideNav.events({
"click .block-item": function (e, tem) {
//var blockItemId = this._id;
}
});
如何从其他地方借用相同的功能,例如onRendered()
?看一下下面的例子:
Template.SideNav.onRendered(function() {
this.$('.block-items').sortable({
update: function (e, ui) {
_.each($('.block-item'), function (blockItem) {
// How do I get blockId?
})
console.log("block item rearranged");
}
});
update
是一个回调函数,当ul
列表中的块项顺序发生变化时,会调用该函数。我需要一种方法来遍历所有块项并获得相应的Mongo id
。我该怎么办?
相关文件:
答案 0 :(得分:1)
如果您正在寻找Blaze如何获取事件和帮助程序的数据上下文,那么事实证明有一个神奇的Blaze.getData()
函数,它将Blaze视图或作为DOM对象并返回它的数据背景。据我所知,通过查看代码,它似乎是Blaze用于向助手和事件提供数据上下文的工具。
所以在你的情况下,你可以使用:
Template.SideNav.onRendered(function() {
this.$('.block-items').sortable({
update: function (e, ui) {
_.each($('.block-item'), function (blockItem) {
var context = Blaze.getData(blockItem.get(0));
var blockId = context._id;
})
console.log("block item rearranged");
}
});
使用DOM操作(除了blaze事件)获取文档id的简单方法是将其显式设置为模板中的属性,例如:
<template name="SideNav">
<ul class='block-items white'>
{{#each blocks}}
<li class='block-item' id='{{_id}}'>
<i class="fa fa-fw fa-folder"></i>
<i class="fa fa-fw fa-folder-open"></i>
<a href='#' class='block-item-link'>
{{name}}
...
{{/each blocks}}
</template>
这样,你可以使用jquery的attr
方法获取id:
Template.SideNav.onRendered(function() {
this.$('.block-items').sortable({
update: function (e, ui) {
_.each($('.block-item'), function (blockItem) {
var blockId = blockItem.attr('id');
})
console.log("block item rearranged");
}
});