Page 回调函数
Page 回调函数可以用来为特定的页面执行特定的代码。Page 回调函数会被 Page 事件有很多优点。
- Page 回调函数不是事件,所以会有更少的的内存占用和更少的内存泄露。
- 因为不是事件,所以不用担心如何监听。
- 有时候会在代码结构上比使用事件更方便。
回调方法
使用 Page 回调函数我们必须使用正确的App方法
myApp.onPageBeforeInit(pageName, callback(page)) - 当Framework7把新页面(必须带有data-page属性)插入到DOM的时候会触发。
- pageName - string - 页面的 "data-page" 属性
- callback(page) - function - 要执行的回调. 会传入一个 Page Data 对象作为参数
myApp.onPageInit(pageName, callback(page)) - 当Framework7初始化一个页面(必须带有data-page属性)的组件和导航栏的时候会触发。
- pageName - string - 页面的 "data-page" 属性
- callback(page) - function - 要执行的回调. 会传入一个 Page Data 对象作为参数
myApp.onPageReinit(pageName, callback(page)) - "callback" function will be executed for specified cached page (with "pageName" data-page attribute) that becomes visible. It is only applicaple for Inline Pages (DOM cached pages)
- pageName - string - expected page's "data-page" attribute
- callback(page) - function - callback function that will be executed. As an argument it receives Page Data object
myApp.onPageBeforeAnimation(pageName, callback(page)) - 当一个页面(有 data-page 属性)初始化完成并且可以开始做动画的时候触发
- pageName - string - 页面的 "data-page" 属性
- callback(page) - function - 要执行的回调. 会传入一个 Page Data 对象作为参数
myApp.onPageAfterAnimation(pageName, callback(page)) - 当一个页面(有 data-page 属性)动画完成之后会触发
- pageName - string - 页面的 "data-page" 属性
- callback(page) - function - 要执行的回调. 会传入一个 Page Data 对象作为参数
myApp.onPageBeforeRemove(pageName, callback(page)) - "callback" function will be executed right before page (with "pageName" data-page attribute) will be removed from DOM- 当一个页面(有 data-page 属性)从DOM移除之前会触发
- pageName - string - 页面的 "data-page" 属性
- callback(page) - function - 要执行的回调. 会传入一个 Page Data 对象作为参数
myApp.onPageBack(pageName, callback(page)) - 当页面开始执行返回动画之前调用。区别于 "onPageBeforeAnimation", 这个函数在老的页面上也会调用,也就是从中间向右滑动的那个页面。
- pageName - string - 你要操作的page的 "data-page" 指定的名字
- callback(page) - function - 回调函数。这个函数会接收一个 Page Data 对象作为参数。
myApp.onPageAfterBack(pageName, callback(page)) - 当页面开始执行返回动画完成之后调用。区别于 "onPageBeforeAnimation", 这个函数在老的页面上也会调用,也就是从中间向右滑动的那个页面。
- pageName - string - 你要操作的page的 "data-page" 指定的名字
- callback(page) - function - 回调函数。这个函数会接收一个 Page Data 对象作为参数。
回调对象
上面的每一个方法都会返回一个回调对象,这个对象有两个方法,你可以用来手动触发或者移除这个回调。
callbackObject.trigger() - 触发回调函数
callbackObject.remove() - 删除回调函数
例子
下面是一些Page回调函数的用法例子
var myApp = new Framework7();
//Add callback function that will be executed when Page with data-page="about" attribute will be initialized
myApp.onPageInit('about', function (page) {
console.log('About page initialized');
console.log(page);
});
//The same but for Services page
myApp.onPageInit('services', function (page) {
console.log('Services page initialized');
console.log(page);
});
//We can add one more callback for About page, and previously added callback for this page will not be overwritten
myApp.onPageInit('about', function (page) {
console.log('One more callback for About page');
console.log(page);
});
//Sometimes we may need the same callback for few pages. We may separate page names with space:
myApp.onPageInit('about services', function (page) {
console.log(page.name + ' initialized');
//In console we will see 'about page initialized' for About page and 'services page initialized' for Services page
});
//We can also add callback for all pages:
myApp.onPageInit('*', function (page) {
console.log(page.name + ' initialized');
});
//Let's create callback for Contacts page (with data-page="contacts" attribute) that we can control later:
var contactsCallback = myApp.onPageInit('contacts', function (page) {
console.log('Contacts page initialized');
console.log(page);
});
// Later we can cancel/remove this callback:
contactsCallback.remove();
// Or we can trigger it manually:
contactsCallback.trigger();
初始化页面的回调
有时候我们需要页面初始化的回调函数,比如在首页中。但是有一个问题,当我们添加 .onPage
回调的时候,应用已经初始化完成了,我们添加的回调函数不会被触发。有如下几个方法可以解决这个问题:
1. 手动初始化
这种情况下我们需要在添加回调函数之后再手动初始化
var myApp = new Framework7({
init: false //Disable App's automatica initialization
});
//Now we add our callback for initial page
myApp.onPageInit('home', function (page) {
//Do something here with home page
});
//And now we initialize app
myApp.init();
2. 使用APP带参数的回调
这样不是很方便,但是我们可以通过参数来做:
var myApp = new Framework7({
onPageInit: function (app, page) {
if (page.name === 'home') {
//Do something here with home page
}
}
});
3. 手动触发
var myApp = new Framework7();
//Now we add our callback for initial page
myApp.onPageInit('home', function (page) {
//Do something here with home page
}).trigger(); //And trigger it right away
注意这种情况下手动触发回调,回调函数不会接受到一个 Page Data 作为参数。