在teardown()之后调用render()不会显示列表数据

calling render() after teardown() does not display list data

本文关键字:显示 列表 数据 调用 teardown 之后 render      更新时间:2023-09-26

我有菜单选项列表,每个菜单项都有自己的Ractive实例,具有不同的模板,但共享数据相同。当每个选择改变时,我在渲染视图实例上调用teardown(),在当前选择的响应实例上调用render(domElement)

示例实例如下所示,所有实例都遵循相同的结构:

 var View = new Ractive({
      template: '#contacts',
      data: { 
          name: 'Contacts',
          contacts : dummyData // array data
      }
});

我把它们呈现在下面

  var isRendered = false;
  channel.subscribe("menu", function(msg) {
        if(msg === "contacts") {
                contentHolder.innerHTML = "";
            View.render(contentHolder);
            isRendered = true;
        } else {
            if(isRendered) {
                View.teardown();
                isRendered = false;
                console.log(View.get('contacts')); // Here I can see the data.
            }
        }
  });

在第一个render()调用视图按预期呈现,但在调用teardown()之后,再次如果我调用render(),它不呈现contacts列表数据,只显示名称属性,但在初始调用时呈现。

请帮我解决这个问题

仅供参考,这个问题在GitHub上得到了回答

teardown()是一个不可逆的调用,它完全破坏了被占用的实例。您需要的是detach()函数,该函数将从DOM中删除活动实例,但不会销毁它。您可以稍后通过调用insert()来使用它。