【发布时间】:2015-07-27 11:23:12
【问题描述】:
我正在开发我已部署的应用程序,并尝试将所有内容升级到最新版本并更新代码以利用最新流程,例如在 Template.onRendered 中订阅,但我似乎破坏了我的可排序.
我的模板(有点简化)
<template name="formEdit">
<div id="formContainer">
{{#if Template.subscriptionsReady}}
{{#with form this}}
<table id="headerFieldsTable" class="table">
<tbody id="headerFields">
{{#each headerFields}}
<tr class="headerFieldRow">
<td>{{> headerFieldViewRow }}</td>
</tr>
{{/each}}
</tbody>
</table>
<h5>Form Fields</h5>
<table id="formFieldsTable" class="table">
<tbody id="formFields">
{{#each formFields}}
<tr class="formFieldRow">
<td>{{> formFieldViewRow }}</td>
</tr>
{{/each}}
</tbody>
</table>
{{/with}}
{{else}}
Loading...
{{/if}}
</div>
</template>
以及模板的onRendered():
Template.formEdit.onRendered(function() {
var formsSubscription = this.subscribe('formById', this.data);
var headerFieldsSubscription = this.subscribe('headerFieldsForForm', this.data);
var formFieldsSubscription = this.subscribe('formFieldsForForm', this.data);
var formEditTemplate = this;
this.autorun(function() {
if (formsSubscription.ready() && headerFieldsSubscription.ready() && formFieldsSubscription.ready()) {
formEditTemplate.$(''));
formEditTemplate.$('#headerFields').sortable({
axis: "y",
stop: function(event, ui) {
var headersToSave = [];
$('#headerFieldsTable div.headerField').each(function(idx, headerFieldDiv) {
var header = Blaze.getData(headerFieldDiv);
header.sequence = idx;
headersToSave.push(header);
});
_.each(headersToSave, function(header) { header.save(); });
}
});
formEditTemplate.$('#formFields').sortable({
axis: "y",
stop: function(event, ui) {
var feildsToSave = [];
$('#formFieldsTable div.formField').each(function(idx, formFieldDiv) {
var field = Blaze.getData(formFieldDiv);
field.sequence = idx;
feildsToSave.push(field);
});
_.each(feildsToSave, function(field) { field.save(); });
}
});
}
});
});
但对于页眉和页脚,formEditTemplate.$('#headerFields') 和 formEditTemplate.$('#formFields') 似乎都没有返回任何结果。似乎 DOM 实际上并不存在。我认为对所有订阅的.ready() 调用会纠正这一点,但认为存在时间问题,Blaze 尚未修复 DOM,但订阅确实完成了。我这样说是因为我在 Chrome 中的 if 的第一行设置了一个断点,而浏览器仍然显示“正在加载...”。
我还尝试通过设置放置在{{#with}} 块末尾的可排序的助手来进行热线处理,希望它可能会最后呈现,但这也不起作用。
我在 Meteor 论坛上发现了一些似乎建议添加计时器的文章,但这似乎非常“骇人听闻”。是否有新的运行 JS 的模式需要完全初始化 DOM?
【问题讨论】:
标签: meteor meteor-blaze