5

我想在表格中显示整个集合,并使用X-editable使每一行中的“名称”字段就地可编辑

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 节点可用之前,我无法运行其中任何一个,所以我将它放在模板的“渲染”回调中。

问题在于,每次集合更改时,都会调用 render ,然后将一个新的可编辑项附加到每个 DOM 节点以及另一个回调。这意味着只要保存“名称”,就会发生内存泄漏和多次回调。

显然我做错了,但我不确定调用 editable 和 on('save', function()) 的正确位置在哪里?

4

3 回答 3

2

在每次渲染后调用 editable 似乎是可靠的(尽管我想可能会导致内存泄漏)。但是,如果您希望绑定到“保存”之类的事件,则应确保取消绑定所有现有事件,否则您将在每次渲染时继续绑定新的保存事件:

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 。

于 2013-02-27T20:09:28.693 回答
0

如果可以的话,我会发表评论,但我现在只有 29 个代表。这样的痛苦。无论如何。

我在 Meteor 0.7.2 中有 x-editable 工作,但自从升级到 0.8.0 后,它不再正确渲染。我倾向于以一堆空标签结束。这是令人沮丧的,因为数据就在那里,只是在渲染函数被触发时还没有。

现在使用 x-editable 的最佳方法是什么,它只触发一次并且不能确保数据在那里。

我正在使用 Iron Router 并且我的模板没有嵌入到 {{#each}} 块中,这似乎是新渲染模型的基本解决方案。

于 2014-04-04T15:53:49.780 回答
0

难道你不记得你是否已经设置了可编辑和事件侦听器,如果你已经设置了就不要这样做吗?

if (editable) {
 // enable editable and add the save listener
 // ...
 editable = true;
}
于 2013-02-21T01:14:19.717 回答