ecomfe/er

页面切换次数多了的时候,会出现hash跳转了但是view没渲染的情况

virola opened this issue · 24 comments

而且貌似是edp build之后才出现,build之前没有。

ps.
用的最新的tag;
build的时候有合并tpl

有js报错么?发svn地址或者git地址。发edp -v的输出

·
edp -v
edp@1.0.1 C:\Users\virola\AppData\Roaming\npm\node_modules\edp
Builtin Commands:
edp-config (1.0.2)
edp-core (1.0.28)
edp-build (1.0.14)
edp-package (0.5.6)
edp-project (0.6.1)
edp-webserver (1.0.16)

User Commands:
edpx-add (1.0.3)
edpx-ws (0.0.2)
·

刚试了下,确认是tplMerge的问题,如果没有merge模板,就能切换正常

@virola 还在用 ER,真爱啊哈哈……

@Justineo 是啊,用这个最快,学新的framework太难啊。
我直接用er做移动端了,也不知有木有坑

@virola 你已经不再百度了?

@leeight 是啊,所以没法给你发svn/git地址啊,不过你可以找个项目试下在edp-build-config里加一个

    var tplMerge = new TplMerge({
        outputType: 'js'
    });

build看看效果

是切换次数多了,还是切换得很快导致的?

@firede 雷哥可以接客了

@virola 我不懂 ER 呀,要不你试试这个:http://ecomfe.github.io/saber/

@leeight PC上也是同样的问题

@otakustay 不是切换很快, 是切换几次(也有点一两次),就开始渲染不了了,或者有的能点有的不能点。模板合并成1个的时候才这样

看一下生成的tpl,需要的target是不是都在

@jinzhubaofu target没有问题,页面都能render一次,就是之后再点进来就没有render;但也不是所有view都这样,有的会渲染有的不会渲染

打开all exceptions pause那个定位下吧…

我会争取明天写个简单的项目试试……

先确认下,TplMergeoutputType不是js的时候是好的?

@otakustay 嗯,文档貌似有说pluginId和outputType一起用才起作用,所以这里写了outputType: js也没有影响最终tpl.html的输出

会不会是因为build-config处理器顺序问题?
我昨天把tplMerge写在 jsCompressor后面了,像这样:

var moduleEntries = 'html,htm,phtml,tpl,vm,js';
var pageEntries = 'html,htm,phtml,tpl,vm';

exports.getProcessors = function () {
    var lessProcessor = new LessCompiler({
        entryExtnames: pageEntries
    });
    var cssProcessor = new CssCompressor();
    var moduleProcessor = new ModuleCompiler({
        configFile: 'module.conf',
        entryExtnames: moduleEntries
    });
    var jsProcessor = new JsCompressor();
    var pathMapperProcessor = new PathMapper({
        replacements: [
            { type: 'html', tag: 'link', attribute: 'href', extnames: pageEntries },
            { type: 'html', tag: 'img', attribute: 'src', extnames: pageEntries },
            { type: 'html', tag: 'audio', attribute: 'src', extnames: pageEntries },
            { type: 'html', tag: 'script', attribute: 'src', extnames: pageEntries },
            { extnames: 'html', replacer: 'module-config' },
            { extnames: 'less,css', replacer: 'css' }
        ],
        from: 'src',
        to: 'asset'
    });
    var addCopyright = new AddCopyright();

    var tplMerge = new TplMerge({
        outputType: 'js'
    });

    return {
        'debug': [ lessProcessor, moduleProcessor, pathMapperProcessor ],
        'default': [
            lessProcessor, cssProcessor, moduleProcessor,
            jsProcessor, 
            tplMerge, 
            pathMapperProcessor, addCopyright
        ]
    };
};

刚刚试了下把 tplMerge 放到 moduleProcessor 前面,然后也把各个view里面require的tpl都提到入口文件里面,这样build出来是没问题的

只用outputType其实最后生成的还是.tpl.html,而不是一个.js,我们这边的项目都是合并模板为一个HTML的,一直没有问题

@virola 能不能确认下你们build后的模板到底是HTML还是js?

Best regards

Gray Zhang

在 2015年2月3日 下午1:53:04, Virola (notifications@github.com) 写到:

会不会是因为build-config处理器顺序问题?
我昨天把tplMerge写在 jsCompressor后面了,像这样:

var moduleEntries = 'html,htm,phtml,tpl,vm,js';
var pageEntries = 'html,htm,phtml,tpl,vm';

exports.getProcessors = function () {
var lessProcessor = new LessCompiler({
entryExtnames: pageEntries
});
var cssProcessor = new CssCompressor();
var moduleProcessor = new ModuleCompiler({
configFile: 'module.conf',
entryExtnames: moduleEntries
});
var jsProcessor = new JsCompressor();
var pathMapperProcessor = new PathMapper({
replacements: [
{ type: 'html', tag: 'link', attribute: 'href', extnames: pageEntries },
{ type: 'html', tag: 'img', attribute: 'src', extnames: pageEntries },
{ type: 'html', tag: 'audio', attribute: 'src', extnames: pageEntries },
{ type: 'html', tag: 'script', attribute: 'src', extnames: pageEntries },
{ extnames: 'html', replacer: 'module-config' },
{ extnames: 'less,css', replacer: 'css' }
],
from: 'src',
to: 'asset'
});
var addCopyright = new AddCopyright();

var tplMerge = new TplMerge({
    outputType: 'js'
});

return {
    'debug': [ lessProcessor, moduleProcessor, pathMapperProcessor ],
    'default': [
        lessProcessor, cssProcessor, moduleProcessor,
        jsProcessor,  
        tplMerge,  
        pathMapperProcessor, addCopyright
    ]
};

};

刚刚试了下把 tplMerge 放到 moduleProcessor 前面,然后也把各个view里面require的tpl都提到入口文件里面,这样build出来是没问题的


Reply to this email directly or view it on GitHub.

@otakustay 恩,是的,我们也是build之后用.tpl.html,模板用的etpl,没用esui

这事没有试出来……因为我们的项目就是build为一个文件的,但始终没出现这情况

你是否能给我可运行的源码之类的来辅助下问题排查……我比较怀疑是某个Action的dispose出了问题之类的

@otakustay https://github.com/virola/demo-project 这个,build之后,点击首页随便那个button,再点logo回首页,再点其他button就会出现这种情况了

搞定了,esl的一个BUG,和我这边曾经遇到过的问题一样,已经让 @errorik 修复过了,你改用2.0.4的esl就好了

顺便给下对应的Issue:ecomfe/esl#35

在这之前我们一直用的esl是1.x版本正好就没事,上周转到2.0.2发现的这问题及时给搞了

soga! 没想到最后是因为esl的bug... = = 切换2.0.4现在可以了~