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

时间:2014-07-23 17:13:19

标签: javascript ractivejs

我有菜单选项列表,每个菜单项都有自己的Ractive实例,不同的模板但共享数据相同。更改每个选择后,我在渲染的视图实例上调用teardown(),在当前选择的Ractive实例上调用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列表数据并仅显示名称属性,但在初始调用时呈现。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

仅供参考,问题已在GitHub

上得到解答

teardown()是一种不可逆的调用,完全破坏了ractive实例。你想要的是detach()函数,它会从DOM中删除ractive实例但不会破坏它。您可以稍后致电insert()

来使用它