Closed jaryway closed 9 years ago
或者这么说,spa不会和cmd模式有冲突,这么解释更好一些。
spa 还得深入研究一下,我看看怎么组织文档结构,还有spa表单验证这块还没接触过。
spa没有表单验证功能
spa核心就做两件事:路由控制和视图转换,目的是构建nativeApp体验的webApp。
知道,表单验证在事件上做,需要处理一下。换成jquery 报错$.os is undefined
官方demo也是一样
哦,看来jquery不支持$.os了,我们后来也没有测试jquery,主要都是做移动端,用zepto;你可以引zepto中的detect.js来支持$.os https://github.com/madrobby/zepto/blob/master/src/detect.js#files
还不能完全引用,你把detect.js copy到你的代码中,放在jquery后面加载,把他最后一样的Zepto换成jQuery
我在选择到底用zepto还jquery方面好纠结。使用jquery文件大不适合移动端,但是有丰富的插件支持比如验证插件,使用zepto文件是小了,但是相关的插件就少的可怜。
建议用zepto,插件如果不是非常必要,尽量自己写,表单验证之类的,如果场景不错复杂度不高,自己写就好了,或者从其他里代码剥离出来核心放在自己代码里,用太多插件加载的的文件就越多,影响速度和性能,移动端尽量轻量化。
用seajs报错 ReferenceError: event is not defined。不支持seajs?
这是哪里报的错?要保证zepto先加载,再加载spa。
我觉得是我的写法有问题,但是不知道怎么写
<script type="text/javascript">
seajs.config({
base: "/scripts/",
alias: {
"zepto": "dist/zepto/zepto.js"
}
});
seajs.use(["zepto", "spa", "address/startup"]);
</script>
//startup文件
define(function (require, exports, module) {
var $ = require("zepto");
console.log(require.resolve("spa"));
var $doc = $(document);
// 首页
var pageHome = {
route: '',
classname: 'home',
animate: 'fadeIn',
view: function () {
var $page = this
require(['spa','address/home'], function (viewData) {
$doc.trigger('spa:initpage', [$page, viewData])
})
}
}
$doc.trigger('spa:route', [pageHome])
$(function () {
$doc.trigger('spa:boot')
})
});
似乎boot文件不能放入cmd定义中?
spa没加载成功吧,spa没有进行cmd封装,你需要自行封装一下。
哎呀,不会封装。
define(function(require) {
// SPA源码放在这里
// 返回spa对象
return $.spa
});
这样子试过了不行的哦,你试成功了?
没有试,因为zepto和spa是底层框架,所以我们都是直接引用的。
已经做出来
<script src="/scripts/require.js"></script>
<script type="text/javascript">
requirejs.config({
baseUrl: '/scripts/',
// urlArgs: "v=" + (new Date()).getTime(),
urlArgs: 'v=20140320',
paths: {
'zepto': 'dist/zepto/zepto.min',
'spa': 'dist/spa/spa-c'
}
})
require(['zepto', 'spa', 'app/startup']);
</script>
//routers.js
define(["zepto"], function ($) {
var $doc = $(document);
return [{
route: '',
classname: 'home',
animate: 'fadeIn',
view: function () {
var $page = this;
requirejs(['app/views/homepage'], function (viewData) {
$doc.trigger('spa:initpage', [$page, viewData])
})
}
},
{
route: 'demo/newpage',
classname: 'demo-newpage',
animate: 'slideInRight',
view: function () {
var $page = this;
requirejs(['app/views/newpage'], function (viewData) {
$doc.trigger('spa:initpage', [$page, viewData])
})
}
}];
});
//startup.js
define(function (require) {
var $ = require('zepto');
var $doc = $(document);
//加载路由设置
var routers = require("app/routers");
$doc.trigger('spa:route', routers);
//启动程序
$(function () { $doc.trigger('spa:boot') });
})
这种方式很优雅,有木有? @zhaoda 啥时候支持回jquery
@jaryway 手动大赞! jQuery的问题是这样,应该是由于个别Zepto的属性或者方法和jQuery不兼容,你可以先试试自己用jQuery调试一下,看看SPA需要进行哪些改动,如果你弄好了,可以直接把SPA的代码pull给我,一起贡献代码,谢谢。
贡献代码以后应该可以,现在还在熟悉怎么使用。
@jaryway 发布了1.0.7新版本,兼容jQuery
支持,只要放在模块闭包里就行,不对外暴露模块接口,spa依赖zepto或者jquery,少量的方法和属性是注册在$下的,主要的接口都是通过事件的方式调用的,你看docs的代码,就是用了cmd。