每次切换路由的时候需要加载页面模板,,和所对应的页面JS采用require.js,发现每个页面自己js通过avalon.define()定义的。。第一次渲染正常,下一次会报错error:[' + $id + '] had defined,代码如下
define(["avalon"],function(avalon){
return function(container,menu,param){
var canSubMenus = avalon.define({
$id:"can_subMenus",
menu:{}
});
avalon.scan(container);
};
});
如果把avalon.define写在外面。。。不是每次定义发现第一次正常。。第二次不会渲染,看了下代码发现
vm && !vm.$element 这个限制。。vm依然存在于avalon.vmodels。上一次已经初始化好了,所以不会重新渲染。
define(["avalon"],function(avalon){
var canSubMenus = avalon.define({
$id:"can_subMenus",
menu:{}
});
return function(container,menu,param){
avalon.scan(container);
};
});
1.当页面重新进来的时候,如何让这个VM重新渲染一遍?
2.当ms-controlll对应的真个元素移除的时候,其对应的VM有没有办法消除?
3.目前本人这么处理的delete avalon.vmodels[$id],感觉太简单粗暴了有没有更好的办法。
4.当从一个单页面切换的另一个单页面的时候,如何做好上一个页面的清理工作?
5.avalon2这个框架。。适合单页面应用吗?
6.以弃坑。。。投奔vue.js或者knockout.js。。。avalon2只提供创建方法,没有提供解绑方法。。。。这个有点坑,以后有机会在用avalon2,感觉整体还是不错的。嘿嘿。
1.delete avalon.vmodels[$id],每次在主页面把非必要的请一次。
2.if (avalon.vmodels[$id]) {
}
在Avalon.js中屏蔽掉这段代码。否则在第二次调用的时候。。不会再初始化这个ms-controller,单页面的情况下我是这么解决的。
3.有入坑的小伙伴。。。。可以教育一下怎么解决的。。。。感觉avalon1还支持。。到了avalon2.。感觉对单页面支持的不咋地。
我做一个fast start吧
https://github.com/RubyLouvre...