Authored by xuqi

Merge branch 'feature/loadMore' of git.dev.yoho.cn:web/yohobuy-frontend into feature/loadMore

开发环境部署:
# yohobuy-mobile
---
## 开发环境部署:
1. 安装node,执行npm install
2. 安装spm,执行spm install
3. gulp启动服务,浏览器访问localhost:5000
Tip: 使用gulp build可以启动spm build服务编译好的文件存入/dist/all.js(or all-debug.js);compass在服务启动时会自动执行编译并监听文件变化。
## to 想调前端代码的后端开发者
### 安装nodejs
[https://nodejs.org/](https://nodejs.org/)
> **注意:** 如果是mac系统记得sudo
### 安装spm
```
npm install -g spm
```
### 安装ruby
如果是mac可以略过,这个已经存在。
windows用户点击这里[http://rubyinstaller.org/](http://rubyinstaller.org/)
### 设置rubygem国内源
```
gem sources --remove https://rubygems.org/
gem sources -a https://ruby.taobao.org/
gem sources -l
```
### 安装compass
```
gem install compass
```
### 初始化项目
```
git clone http://git.dev.yoho.cn/web/yohobuy-frontend.git
cd yoho-frontend/mobile
npm install
spm install
spm doc|comapss watch
```
### 打开本地的JS和css
```
http://localhost:8000/examples/index.html
```
### js,css调用方式
## 引用方式
### seajs的路径
````html
<script src="http://localhost:8000/static/js/sea.js?nowrap"></script>
````
### 配置样式表的路径
````
<link rel="stylesheet" type="text/css" href="http://localhost:8000/public/css/index.css">
````
### 配置seajs
````javascript
seajs.config({
base: "/" //seajs加载器的js基础路径
});
````
### 界面调用
````javascript
var yohobuyMobile = seajs.use('index');
````
or
````javascript
var yohobuyMobile = require('index');
````
... ...
# Demo
---
## 引用方式
### seajs的路径
````html
<script src="../static/js/sea.js?nowrap"></script>
````
### 配置样式表的路径
````
<link rel="stylesheet" type="text/css" href="../public/css/index.css">
````
### 配置seajs
````javascript
seajs.config({
base: "/" //seajs加载器的js基础路径
});
````
### 界面调用
````javascript
var yohobuyMobile = seajs.use('index');
````
or
````javascript
var yohobuyMobile = require('index');
````
... ...
/*! Sea.js 2.3.0 | seajs.org/LICENSE.md */ ! function(a, b) {
function c(a) {
return function(b) {
return {}.toString.call(b) == "[object " + a + "]"
}
}
function d() {
return z++
}
function e(a) {
return a.match(C)[0]
}
function f(a) {
for (a = a.replace(D, "/"), a = a.replace(F, "$1/"); a.match(E);) a = a.replace(E, "/");
return a
}
function g(a) {
var b = a.length - 1,
c = a.charAt(b);
return "#" === c ? a.substring(0, b) : ".js" === a.substring(b - 2) || a.indexOf("?") > 0 || "/" === c ? a : a + ".js"
}
function h(a) {
var b = u.alias;
return b && w(b[a]) ? b[a] : a
}
function i(a) {
var b = u.paths,
c;
return b && (c = a.match(G)) && w(b[c[1]]) && (a = b[c[1]] + c[2]), a
}
function j(a) {
var b = u.vars;
return b && a.indexOf("{") > -1 && (a = a.replace(H, function(a, c) {
return w(b[c]) ? b[c] : a
})), a
}
function k(a) {
var b = u.map,
c = a;
if (b)
for (var d = 0, e = b.length; e > d; d++) {
var f = b[d];
if (c = y(f) ? f(a) || a : a.replace(f[0], f[1]), c !== a) break
}
return c
}
function l(a, b) {
var c, d = a.charAt(0);
if (I.test(a)) c = a;
else if ("." === d) c = f((b ? e(b) : u.cwd) + a);
else if ("/" === d) {
var g = u.cwd.match(J);
c = g ? g[0] + a.substring(1) : a
} else c = u.base + a;
return 0 === c.indexOf("//") && (c = location.protocol + c), c
}
function m(a, b) {
if (!a) return "";
a = h(a), a = i(a), a = j(a), a = g(a);
var c = l(a, b);
return c = k(c)
}
function n(a) {
return a.hasAttribute ? a.src : a.getAttribute("src", 4)
}
function o(a, b, c) {
var d = K.createElement("script");
if (c) {
var e = y(c) ? c(a) : c;
e && (d.charset = e)
}
p(d, b, a), d.async = !0, d.src = a, R = d, Q ? P.insertBefore(d, Q) : P.appendChild(d), R = null
}
function p(a, b, c) {
function d() {
a.onload = a.onerror = a.onreadystatechange = null, u.debug || P.removeChild(a), a = null, b()
}
var e = "onload" in a;
e ? (a.onload = d, a.onerror = function() {
B("error", {
uri: c,
node: a
}), d()
}) : a.onreadystatechange = function() {
/loaded|complete/.test(a.readyState) && d()
}
}
function q() {
if (R) return R;
if (S && "interactive" === S.readyState) return S;
for (var a = P.getElementsByTagName("script"), b = a.length - 1; b >= 0; b--) {
var c = a[b];
if ("interactive" === c.readyState) return S = c
}
}
function r(a) {
var b = [];
return a.replace(U, "").replace(T, function(a, c, d) {
d && b.push(d)
}), b
}
function s(a, b) {
this.uri = a, this.dependencies = b || [], this.exports = null, this.status = 0, this._waitings = {}, this._remain = 0
}
if (!a.seajs) {
var t = a.seajs = {
version: "2.3.0"
},
u = t.data = {},
v = c("Object"),
w = c("String"),
x = Array.isArray || c("Array"),
y = c("Function"),
z = 0,
A = u.events = {};
t.on = function(a, b) {
var c = A[a] || (A[a] = []);
return c.push(b), t
}, t.off = function(a, b) {
if (!a && !b) return A = u.events = {}, t;
var c = A[a];
if (c)
if (b)
for (var d = c.length - 1; d >= 0; d--) c[d] === b && c.splice(d, 1);
else delete A[a];
return t
};
var B = t.emit = function(a, b) {
var c = A[a],
d;
if (c) {
c = c.slice();
for (var e = 0, f = c.length; f > e; e++) c[e](b)
}
return t
},
C = /[^?#]*\//,
D = /\/\.\//g,
E = /\/[^/]+\/\.\.\//,
F = /([^:/])\/+\//g,
G = /^([^/:]+)(\/.+)$/,
H = /{([^{]+)}/g,
I = /^\/\/.|:\//,
J = /^.*?\/\/.*?\//,
K = document,
L = location.href && 0 !== location.href.indexOf("about:") ? e(location.href) : "",
M = K.scripts,
N = K.getElementById("seajsnode") || M[M.length - 1],
O = e(n(N) || L);
t.resolve = m;
var P = K.head || K.getElementsByTagName("head")[0] || K.documentElement,
Q = P.getElementsByTagName("base")[0],
R, S;
t.request = o;
var T = /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g,
U = /\\\\/g,
V = t.cache = {},
W, X = {},
Y = {},
Z = {},
$ = s.STATUS = {
FETCHING: 1,
SAVED: 2,
LOADING: 3,
LOADED: 4,
EXECUTING: 5,
EXECUTED: 6
};
s.prototype.resolve = function() {
for (var a = this, b = a.dependencies, c = [], d = 0, e = b.length; e > d; d++) c[d] = s.resolve(b[d], a.uri);
return c
}, s.prototype.load = function() {
var a = this;
if (!(a.status >= $.LOADING)) {
a.status = $.LOADING;
var c = a.resolve();
B("load", c);
for (var d = a._remain = c.length, e, f = 0; d > f; f++) e = s.get(c[f]), e.status < $.LOADED ? e._waitings[a.uri] = (e._waitings[a.uri] || 0) + 1 : a._remain--;
if (0 === a._remain) return a.onload(), b;
var g = {};
for (f = 0; d > f; f++) e = V[c[f]], e.status < $.FETCHING ? e.fetch(g) : e.status === $.SAVED && e.load();
for (var h in g) g.hasOwnProperty(h) && g[h]()
}
}, s.prototype.onload = function() {
var a = this;
a.status = $.LOADED, a.callback && a.callback();
var b = a._waitings,
c, d;
for (c in b) b.hasOwnProperty(c) && (d = V[c], d._remain -= b[c], 0 === d._remain && d.onload());
delete a._waitings, delete a._remain
}, s.prototype.fetch = function(a) {
function c() {
t.request(g.requestUri, g.onRequest, g.charset)
}
function d() {
delete X[h], Y[h] = !0, W && (s.save(f, W), W = null);
var a, b = Z[h];
for (delete Z[h]; a = b.shift();) a.load()
}
var e = this,
f = e.uri;
e.status = $.FETCHING;
var g = {
uri: f
};
B("fetch", g);
var h = g.requestUri || f;
return !h || Y[h] ? (e.load(), b) : X[h] ? (Z[h].push(e), b) : (X[h] = !0, Z[h] = [e], B("request", g = {
uri: f,
requestUri: h,
onRequest: d,
charset: u.charset
}), g.requested || (a ? a[g.requestUri] = c : c()), b)
}, s.prototype.exec = function() {
function a(b) {
return s.get(a.resolve(b)).exec()
}
var c = this;
if (c.status >= $.EXECUTING) return c.exports;
c.status = $.EXECUTING;
var e = c.uri;
a.resolve = function(a) {
return s.resolve(a, e)
}, a.async = function(b, c) {
return s.use(b, c, e + "_async_" + d()), a
};
var f = c.factory,
g = y(f) ? f(a, c.exports = {}, c) : f;
return g === b && (g = c.exports), delete c.factory, c.exports = g, c.status = $.EXECUTED, B("exec", c), g
}, s.resolve = function(a, b) {
var c = {
id: a,
refUri: b
};
return B("resolve", c), c.uri || t.resolve(c.id, b)
}, s.define = function(a, c, d) {
var e = arguments.length;
1 === e ? (d = a, a = b) : 2 === e && (d = c, x(a) ? (c = a, a = b) : c = b), !x(c) && y(d) && (c = r("" + d));
var f = {
id: a,
uri: s.resolve(a),
deps: c,
factory: d
};
if (!f.uri && K.attachEvent) {
var g = q();
g && (f.uri = g.src)
}
B("define", f), f.uri ? s.save(f.uri, f) : W = f
}, s.save = function(a, b) {
var c = s.get(a);
c.status < $.SAVED && (c.id = b.id || a, c.dependencies = b.deps || [], c.factory = b.factory, c.status = $.SAVED, B("save", c))
}, s.get = function(a, b) {
return V[a] || (V[a] = new s(a, b))
}, s.use = function(b, c, d) {
var e = s.get(d, x(b) ? b : [b]);
e.callback = function() {
for (var b = [], d = e.resolve(), f = 0, g = d.length; g > f; f++) b[f] = V[d[f]].exec();
c && c.apply(a, b), delete e.callback
}, e.load()
}, t.use = function(a, b) {
return s.use(a, b, u.cwd + "_use_" + d()), t
}, s.define.cmd = {}, a.define = s.define, t.Module = s, u.fetchedList = Y, u.cid = d, t.require = function(a) {
var b = s.get(s.resolve(a));
return b.status < $.EXECUTING && (b.onload(), b.exec()), b.exports
}, u.base = O, u.dir = O, u.cwd = L, u.charset = "utf-8", t.config = function(a) {
for (var b in a) {
var c = a[b],
d = u[b];
if (d && v(d))
for (var e in c) d[e] = c[e];
else x(d) ? c = d.concat(c) : "base" === b && ("/" !== c.slice(-1) && (c += "/"), c = l(c)), u[b] = c
}
return B("config", a), t
}
}
}(this);;
seajs.config({
base: '/public/js'
});
\ No newline at end of file
... ...