我希望在表格中显示整个集合,然后制作" name"使用X-editable
编辑的每一行中的字段都可以使用可以使用最近添加的"选择器"将可编辑的数据附加到表格中的每个名称。选项:
$('#collectionTable').editable({
selector: '.editable-click',
});
// I also need to setup a 'save' callback to update the collection...
$('a.editable-click').on('save', function(e, params) {
console.log('Saved value: ' + params.newValue);
// TBD: update the collection
});
但是我无法运行其中任何一个,直到模板完成渲染并且DOM节点可用,所以我把它放在"渲染"回调模板。
问题在于,每次集合更改时,都会调用呈现,然后将新的editable附加到每个DOM节点以及另一个回调。这意味着只要" name"就会发生内存泄漏和多次回调。保存了。
显然我做错了,但我不确定在哪里调用editable和on(' save',function())?
答案 0 :(得分:2)
每次渲染后调用可编辑似乎都是可靠的(尽管我认为可能导致内存泄漏)。但是如果你想绑定到像'save'这样的事件,你应该确保解除所有现有事件的绑定,否则你将在每次渲染时继续绑定新的保存事件:
Template.editableTable.rendered = function() {
$('#myParentTable').editable({
selector: '.editable-click'
});
$('a.editable-click').unbind('save').on('save', function(e, params) {
// Make changes to your collection here.
});
};
我在第一次渲染模板时只尝试调用editable。如果模板被销毁(例如使用动态创建和销毁模板的路由器),那么只要你确保再次调用它就会有效。但是有些边缘情况似乎不起作用,所以我在每次渲染后都恢复到只调用editable。
答案 1 :(得分:0)
难道你不能记住你是否已经设置了可编辑和事件监听器,如果你已经有了它,那就不要这样做了吗?
if (editable) {
// enable editable and add the save listener
// ...
editable = true;
}
答案 2 :(得分:0)
我在Meteor 0.7.2中有x-editable工作,但自升级到0.8.0后,它不再正确呈现。我倾向于最终得到一堆空标签。这是令人沮丧的,因为数据存在,而不是在渲染函数被触发时。
现在使用x-editable的最佳方法是什么,渲染只会触发一次并且无法确保数据存在。
我正在使用Iron Router,我的模板没有嵌入{{#each}}块中,这似乎是新渲染模型的基本解决方案。