Skip to content

Commit 4c99ac6

Browse files
author
zhangxinxu
committed
callback和fallback上下文处理
callback和fallback上下文处理, 之前存在上下文可能会变成window的问题
1 parent c103be8 commit 4c99ac6

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/mobilebone.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,13 @@
175175
var local_function_key = element.getAttribute("data-" + key) || _dataparams[key];
176176
if (typeof _params.root[local_function_key] == "function") {
177177
_params[key] = function() {
178-
defaults[key].apply(null, arguments);
179-
_params.root[local_function_key].apply(null, arguments);
178+
defaults[key].apply(this, arguments);
179+
_params.root[local_function_key].apply(this, arguments);
180180
}
181181
} else if (typeof options[key] == "function") {
182182
_params[key] = function() {
183-
defaults[key].apply(null, arguments);
184-
options[key].apply(null, arguments);
183+
defaults[key].apply(this, arguments);
184+
options[key].apply(this, arguments);
185185
}
186186
} else {
187187
_params[key] = defaults[key];
@@ -208,7 +208,7 @@
208208
// do fallback every time
209209
var fallback = params_out.fallback;
210210
if (typeof fallback == "string") fallback = params_out.root[fallback];
211-
if (typeof fallback == "function") fallback(pageInto, pageOut, options.response);
211+
if (typeof fallback == "function") fallback.call(params_out.root, pageInto, pageOut, options.response);
212212
}
213213
if (pageInto != null && pageInto.classList) {
214214
// for title change
@@ -302,8 +302,9 @@
302302

303303
// do callback every time
304304
var callback = params_in.callback;
305+
305306
if (typeof callback == "string") callback = params_in.root[callback];
306-
if (typeof callback == "function") callback(pageInto, pageOut, options.response);
307+
if (typeof callback == "function") callback.call(params_in.root, pageInto, pageOut, options.response);
307308
}
308309
};
309310

test/callback/index.html

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ <h2>主页</h2>
2626
</ul>
2727
<p></p>
2828
</div>
29-
<div id="page1" class="page out" data-params="animationstart=start&amp;animationend=end">
29+
<div id="page1" class="page out" data-callback="callback" data-params="animationstart=start&amp;animationend=end">
3030
<a href="#pageHome" data-rel="back">&laquo;返回1</a>
3131
<p></p>
3232
</div>
@@ -55,6 +55,9 @@ <h2>主页</h2>
5555
into: "进入",
5656
out: "离开"
5757
},
58+
callback: function() {
59+
console.log(this.status.into = "回调执行!this对应的是Fun!");
60+
},
5861
home: function(pageInto, pageOut, response) {
5962
pageInto.querySelector("p").innerHTML += "首次载入时间是:" + this.time() + "<br>";
6063
},
@@ -65,6 +68,17 @@ <h2>主页</h2>
6568
page.querySelector("p").innerHTML += "页面"+ this.status[into_or_out] +"动画完成,时间是:" + this.time() + "<br>";
6669
}
6770
};
71+
// 2014-12-28新增回调合并时候的上下文测试
72+
Mobilebone.callback = function() {
73+
// 上下文为当前page回调所在的对象,例如本测试页面:
74+
// 1. 默认为Fun;
75+
// 2. page2因为root=window, 因此上下文为window
76+
// 3. 页面3则是 callback_page.test_obj
77+
// 需要注意的是,如果存在回调合并的情况,其公用同一个上下文this, 值同上规则
78+
console.log("全局回调上下文this: ");
79+
console.log(this);
80+
};
81+
6882

6983
window.callback_page = function(page) {
7084
// 按钮居中

0 commit comments

Comments
 (0)