Meteor + Materialize:可折叠的每个都不起作用
Meteor + Materialize: collapsable in for each doesn't work
我有一个可折叠(实现),其元素是从 for each
创建的,但是 "dropdown" 不起作用。 for each
中没有的所有内容都有效。
我该如何解决这个问题?
jobList.html
<template name="jobList">
<ul class="collapsible" data-collapsible="accordion">
{{#each jobs}}
<li>
<div class="collapsible-header">{{title}}</div>
<div class="collapsible-body"><p>{{description}}</p></div>
</li>
{{/each}}
</ul>
jobList.js
Template.jobList.rendered = function () {
$('.collapsible').collapsible({
accordion: false
});
};
Template.jobList.helpers({
jobs: function() {
return Jobs.find();
}
});
模板 jobList
位于另一个模板中,除了 {{> jobList}}
.
什么都不做
此问题与 DOM 就绪相关,在您执行 jQuery 插件初始化时,{{#each}}
循环尚未呈现 HTML 元素.
解决这个问题的方法是为return要迭代的光标定义一个单独的函数,并在onRendered
内的autorun
内观察这个光标模板的回调。
当我们检测到游标计数被修改时,这意味着文档已被添加(特别是当订阅准备就绪并且初始文档集已到达客户端时)或被删除,我们必须重新-运行 jQuery 插件初始化。
在 运行 初始化 jQuery 之前等待所有其他当前无效计算完成是很重要的,这就是我们需要使用 Tracker.afterFlush
的原因(我们无法预测无效计算的顺序是重新运行,我们只能在此过程完成后执行代码。
那是因为return我们的游标助手也是一个计算,当添加或删除文档时会失效,因此插入或删除相应的 DOM 子集:那么它是至关重要的在 DOM 操作完成后执行我们的 jQuery 插件初始化。
function jobsCursor(){
return Jobs.find();
}
Template.jobsList.onRendered(function(){
this.autorun(function(){
// registers a dependency on the number of documents returned by the cursor
var jobsCount = jobsCursor().count();
// this will log 0 at first, then after the jobs publication is ready
// it will log the total number of documents published
console.log(jobsCount);
// initialize the plugin only when Blaze is done with DOM manipulation
Tracker.afterFlush(function(){
this.$(".collapsible").collapsible({
accordion: false
});
}.bind(this));
}.bind(this));
});
Template.jobsList.helpers({
jobs:jobsCursor
});
我有一个可折叠(实现),其元素是从 for each
创建的,但是 "dropdown" 不起作用。 for each
中没有的所有内容都有效。
我该如何解决这个问题?
jobList.html
<template name="jobList">
<ul class="collapsible" data-collapsible="accordion">
{{#each jobs}}
<li>
<div class="collapsible-header">{{title}}</div>
<div class="collapsible-body"><p>{{description}}</p></div>
</li>
{{/each}}
</ul>
jobList.js
Template.jobList.rendered = function () {
$('.collapsible').collapsible({
accordion: false
});
};
Template.jobList.helpers({
jobs: function() {
return Jobs.find();
}
});
模板 jobList
位于另一个模板中,除了 {{> jobList}}
.
此问题与 DOM 就绪相关,在您执行 jQuery 插件初始化时,{{#each}}
循环尚未呈现 HTML 元素.
解决这个问题的方法是为return要迭代的光标定义一个单独的函数,并在onRendered
内的autorun
内观察这个光标模板的回调。
当我们检测到游标计数被修改时,这意味着文档已被添加(特别是当订阅准备就绪并且初始文档集已到达客户端时)或被删除,我们必须重新-运行 jQuery 插件初始化。
在 运行 初始化 jQuery 之前等待所有其他当前无效计算完成是很重要的,这就是我们需要使用 Tracker.afterFlush
的原因(我们无法预测无效计算的顺序是重新运行,我们只能在此过程完成后执行代码。
那是因为return我们的游标助手也是一个计算,当添加或删除文档时会失效,因此插入或删除相应的 DOM 子集:那么它是至关重要的在 DOM 操作完成后执行我们的 jQuery 插件初始化。
function jobsCursor(){
return Jobs.find();
}
Template.jobsList.onRendered(function(){
this.autorun(function(){
// registers a dependency on the number of documents returned by the cursor
var jobsCount = jobsCursor().count();
// this will log 0 at first, then after the jobs publication is ready
// it will log the total number of documents published
console.log(jobsCount);
// initialize the plugin only when Blaze is done with DOM manipulation
Tracker.afterFlush(function(){
this.$(".collapsible").collapsible({
accordion: false
});
}.bind(this));
}.bind(this));
});
Template.jobsList.helpers({
jobs:jobsCursor
});