如何在Meteor模板中的动态字段上使用X-editable?

时间:2013-02-21 00:52:28

标签: meteor

我希望在表格中显示整个集合,然后制作" 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())?

3 个答案:

答案 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)

如果可以的话,我会留下评论,但我现在只有29rep。这样的痛苦。无论如何。

我在Meteor 0.7.2中有x-editable工作,但自升级到0.8.0后,它不再正确呈现。我倾向于最终得到一堆空标签。这是令人沮丧的,因为数据存在,而不是在渲染函数被触发时。

现在使用x-editable的最佳方法是什么,渲染只会触发一次并且无法确保数据存在。

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