2015-12-01 104 views
1

我用tpl查看(XTemplate),这个tpl的数据是商店。 在程序工作期间,某些商店的商品会更改其中一个字段值。如预期的那样 - tpl也会发生变化。但是,重新绘制所有模板项目,并且在视觉上看起来像闪烁。tplWriteMode属性不起作用

Sencha docs表示我们可以使用tplWriteMode属性更改模板的默认覆盖方法,但它不起作用(请参阅下面的示例)。

Ext.application({ 
name : 'Fiddle', 

launch : function() { 
    var tpl = new Ext.XTemplate('<tpl for=".">', 
            '<div>', 
             '{name}', 
             '<br/>', 
             '<span>Best Friend:{bestFriend}</span>', 
            '</div>', 
           '</tpl>', 
           { 
            newOverWriteMode: function(){ 
             console.log('hello from newOverWriteMode'); 
            } 
           }); 

    Ext.create('Ext.panel.Panel', { 
     title: 'Hello', 
     width: 200,   
     data: [ 
      { 
       name: 'Mike', 
       bestFriend: 'Anna' 
      }, 
      { 
       name: 'Bob', 
       bestFriend: 'Peter' 
      } 
     ], 
     tpl: tpl, 
     tplWriteMode: 'newOverWriteMode', 

     renderTo: Ext.getBody() 
    }); 
} 

});

我做错了什么,或者我明白这种方法的使命是错误的?

回答

0

根据文档,tplWriteMode不用于第一次创建内容,这是我在您的示例代码中看到的唯一的东西。

此外,我不知道为什么组件应该自动重新渲染,因为您只是在后面的某个位置更改了data属性。通常,它会显式调用applyData或类似的函数来更新组件的内容。大多数情况下,组件会监听它的大部分事件(加载,更新,...),并在这些事件触发时调用applyData或类似的方法。

当您查看我的代码fiddle时,“更改”按钮将更改数据,然后调用applyData。在小提琴中,组件内容没有更新,因为我保持(空)newOverwrite方法启用 - 所以你得到你希望的控制台日志。在注释掉tplWriteMode后,数据被更新。

所以在我看来,仿佛tplWriteMode正如文档中所描述的那样工作。

HTH!