extjs的card布局中使用XTemplate模板填充item的问题

先看代码for(vari=0;i<dataFile.length;i++){_pageFile=dataFile[i];wp.add({id:'card-'+(i+1),... 先看代码
for (var i = 0; i < dataFile.length; i++) {
_pageFile = dataFile[i];
wp.add({
id: 'card-' + (i + 1),
tpl : new Ext.XTemplate(
'<table border="1">',
'<tr><td>规格</td><td>图片</td><td>对白</td></tr>',
'<tpl for="pageFile">',
'<tr><td>{spec}</td><td>{pic}-{ranged}</td><td>{dialogue}-{ranged}</td></tr>',
'</tpl>',
'</table>'
),
listeners : {
'render' : function(panel){
this.tpl.overwrite(this.body, _pageFile);
}
},
scope : this
});
}

这是一个片段,wp是一个panel,使用card布局。dataFile是要展示的数据数组,其中每一个_pageFile的内容,就是要通过XTemplate填充成card的一页。

现在有个问题是,按照以上的for循环之后,card布局里面展示的每一页都是dataFile的最后一组数据。
预计结果应该是通过for循环,每一页都应该是对应的_pageFile内容。

是extjs写的有问题吗?有没有了解的呢?求解,万分感谢。。
展开
 我来答
百度网友58cc779
推荐于2016-04-07
知道答主
回答量:9
采纳率:0%
帮助的人:7.4万
展开全部

本质原因是变量_pageFile是在render事件触发后,才调用事件函数然后去获取这个参数,而这个参数最后的结果是数据的最后一个值,修改代码如下:


//..

listeners : {
                'render' : function(panel){
                    console.log(this);
                    this.tpl.overwrite(this.body, this.initialConfig.pageFile);
                }
            },
            scope : this,
            pageFile : _pageFile


//..


完整的例子:

     var curIndex = 1;
    var navHandler = function(){
         if(curIndex == 2) {
         curIndex  = 0
        }
   card.getLayout().setActiveItem(curIndex);
    curIndex ++;
    
};
    var card = new Ext.Panel({
    title: '向导的演示 Example Wizard',
    layout:'card',
    activeItem: 0,
    bodyStyle: 'padding:15px',
    defaults: {
       // 每个子组件都有效 applied to each contained panel
        border:false
    },
    // 简单的导航按钮,可以扩展更多 just an example of one possible navigation scheme, using buttons
    bbar: [
        {
            id: 'move-prev',
            text: '后退',
            text: 'Back',
            handler: navHandler.createDelegate(this, [-1]),
            disabled: true
        },
        '->',
        {
            id: 'move-next',
            text: '前进 Next',
            handler: navHandler.createDelegate(this, [1])
        }
    ],
    // 内面的面板,就是“卡片” the panels (or "cards") within the layout
    items: []
});

    var dataFile = [
            {
                pageFile : [
                    {
                        spec : 1,
                        pic : 11,
                        ranged : 111
                    }
                ]
            },
            {
                pageFile : [
                    {
                        spec : 2,
                        pic : 22,
                        ranged : 222
                    }
                ]
            }
    ];
    var _pageFile;
    for (var i = 0; i < dataFile.length; i++) {
        _pageFile = dataFile[i];
        //_pageFile =
        card.add({
            id: 'card-' + (i + 1),
            tpl : new Ext.XTemplate(
                '<table border="1">',
                '<tr><td>规格</td><td>图片</td><td>对白</td></tr>',
                '<tpl for="pageFile">',
                '<tr><td>{spec}</td><td>{pic}-{ranged}</td><td>{dialogue}-{ranged}</td></tr>',
                '</tpl>',
                '</table>'
            ),
            listeners : {
                'render' : function(panel){
                    console.log(this);
                    this.tpl.overwrite(this.body, this.initialConfig.pageFile);
                }
            },
            scope : this,
            pageFile : _pageFile
        });
    }
    card.render(document.body)


本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式