limu / magix Goto Github PK
View Code? Open in Web Editor NEWA Web Application Framework
Home Page: http://magixjs.github.com
A Web Application Framework
Home Page: http://magixjs.github.com
1.支持location.path,location.search映射至page,自定义page映射规则.
2.支持以body为rootview
3.query对象增加search部分解析
假设如下的界面
┏━━━━━━━━━━━━━━━┓
┃ H ┃
┃ ┃
┣━━━┳━━━━━━━━━━━┫
┃ ┃ ┃
┃ ┃ M┏━━━━━┓ ┃
┃ S ┃ ┃ ┃ ┃
┃ ┃ ┃ Z ┃ ┃
┃ ┃ ┃ ┃ ┃
┃ ┃ ┗━━━━━┛ ┃
┗━━━┻━━━━━━━━━━━┛
根据遇到的这个问题,考虑return true或false外,提供一个return Array的功能,当返回值是数组是,我们只通知数组包含的view,这样或许能够解决掉这个通知的问题
左莫 (2011-09-07 10:37:06):
Controller里的config不应该和项目的ini文件关联在一起,可以在Magix下增加config方法配置,或者Magix.History启动的时候传入。
先搞清楚handlebars是否能满足我们以上的要求,如果可以,则使用它,如果不能,再说~
主要集中在view这一块的API名称
方法:
view.queryModelChange=>view.hashChange(qm) //参数仍然使用queryModel
事件:
view.rendered=>view.rendered
view.beforeRebuild=>view.unload
当然事件还有别的,对于应用中只需要知道这2个即可
但是这样的事件要求事件能冒泡,因为magix中,会把当前view中要用到的事件比如click,mousedown等在view的根节点中注册事件,如果事件不能冒泡,则无法在根节点捕捉得到,也就无法处理
常见的不冒泡的事件如focus,blur,change,submit等,而这些事件也不是在所有浏览器中都不冒泡,是有浏览器差异的(这块最好能把各浏览器版本的支持情况列举下)
通过阅读jQuery的事件部分和KISSY的事件部分,它们对于处理不冒泡的事件思路是一致的,以submit事件举例,在不支持冒泡的情况下,如果当前节点需要监听submit事件,则首先判断当前节点下是否有form表单(只有form表单才有submit),如果有,则给这个节点绑定click,keypress事件(既然submit无法冒泡,那么我们就监听能触发submit并且冒泡的事件),当click或keypress发生时,我们这时才去给form绑定submit事件,在submit监听中,再手工去进行冒泡(找parentNode,触发submit),直到最顶层。
另外对于change事件较复杂,blur,foucs需要兼容一下浏览器,不过原理上跟上面所提到的submit都是一样的。
对于需要处理的事件大致为以下事件:
helper中的getTemplate,增加是否同域的判断来读取view的模板文件。
从页面<script type="text/template">内容中获取模板
确定magixjs完整的打包方案
鉴于maigx的更新界面方案,目前考虑去掉collection,保留model,不把list转成数据对象(model), 那么对于需要较直观的更新数据,可考虑在model上增加静态方法如get put delete post,引入modeltype标识怎样更新一条数据。
考虑一份远端数据在数个VIEW中需要使用
目前可供使用的有
参考gmail,hash改变后,view的刷新使用display=none隐藏上一个,然后重新创建当前需要展示的view,当需要后退时,可者hash再次改变时,隐藏当前的view,把之前隐藏的view再次显示
1.可以完整的保持上一个view的状态,比如checkbox的选中等,不需要hash维护
2.避免重复创建dom节点的开销
magix目前是整个刷新掉view的做法,使用这种做法还很困难,不过这是一个很好的借鉴方案,某些时候隐藏view能带来更好的效果,比如对于需要还原界面的地方
考虑如下代码:
KISSY.add('app.views/home',function(S,MxView){
return MxView.extend({
render:function(){
var self=this;
S.use('med-calendar',function(S,Cal){
if(!self.exist)return;
}):
}
});
},{
requires:['magix/view']
});
注意render方法中 **if(!self.exist)return;**代码,由于S.use是异步载入的,那么很可能在载入后,该view已经被卸载掉,导致接下来在访问或使用DOM节点时,出现异常
类似的还有model异步获取数据、直接使用XHR与后台交互等,如果未加eixst判断,很可能在用户已经点击到别的地方,当前view已经卸掉后这些异步请求才返回,而此时访问界面通常都会由于节点已经不存在而导致异常,影响OPOA的后续运行,所以需要添加exist判断当前view确实存在才进行操作界面
通常我们在开发中很难记得去添加exist判断,导致后期排队错误非常困难,因为缺少判断并不会立即导致程序出错,这种出错往往在网络不太好,而用户切换view出现的
我们对于konckout来看这个问题
对于konckout伪代码如下:
Model={
name:ko.observe('a');
}
<span data-bind="text:name"></span>
我们在更新界面时如下操作:
Model.name('b');
注意:
konckout把更新界面的动作在内部处理了,它内部有判断当前节点是否存在才进行更新,而magix是采用大面积更新的方式,很难做到对所有的节点操作进行代理,因此这块是一个比较大的隐患,后续需要解决这个隐患才能使magix更安全健壮
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.