Framework7 路由,从现有 JSON 字符串加载页面
Framework7 routes, load page from existing JSON string
我一开始就有JSON数据加载,也是拉动刷新。在这些时间里,预计会有小的延迟。在页面之间移动时,它应该很活泼,所以我希望将这个已经请求的 JSON 用于我的页面内容。 JSON 对象之一是整个(足够小)html 页面。
我找不到使用它的方法,而是按照示例在加载每个页面(文章)之前发出第二个 JSON get 请求。我宁愿只在开始时加载一次 JSON 数据并使用它直到通过下拉刷新刷新。
* 目前正在工作,但使用第二个 JSON 得到 *
{
path: '/article/:article_id/',
// This works after much turmoil.
// sadly have to do a second json call. could have got with initial.
async: function (routeTo, routeFrom, resolve, reject) {
//Testing
// import('window.TodayJsonDB['+ routeTo.params.article_id +'][\'html\']');
// window.TodayJsonDB[routeTo.params.article_id]['html'];
// [data['article']['article_html']
// console.log(routeTo);
// Get external data and return template7 template
this.app.request.json('/__php/json1.php', { one: 1, article_id: routeTo.params.article_id }, function (data) {
// console.log(data['article'][0]['article_html']);
resolve(
// DOM locked until resolve returned.
// object with resolved route content. Must contain one of:
// url, content, template, templateUrl, component or componentUrl
{
content: data['article'][0]['article_html'],
},
);
});
}
// A day of testin but couldnt figure out how to use existing json feed.
//asyncComponent: () => import('window.TodayJsonDB['+ params.article_id +'][\'html\']'),
//el: window.TodayJsonDB[params.article_id]['html'],
//el: import('window.TodayJsonDB['+ params.article_id +'][\'html\']'),
//template: import('window.TodayJsonDB['+ params.article_id +'][\'html\']'),
//template: import('window.TodayJsonDB[' + params.article_id +'][html]'),
//asyncComponent: () => import('window.TodayJsonDB[' + params.article_id +'][html]'),
//asyncComponent: () => import('window.TodayJsonDB[' + $route.params.article_id +'][html]'),
//asyncComponent: () => import('window.TodayJsonDB[' + {{article_id}} +'][html]'),
//asyncComponent: () => import('window.TodayJsonDB[11][\'html\']'),
//content: window.TodayJsonDB[':article_id']['html'],
},
我已经有了这个 json 已经得到了;应用程序打开时加载并使用下拉更新:window.TodayJsonDB
其中包含:
window.TodayJsonDB[data['article'][i]['article_id']] = new Array();
window.TodayJsonDB[data['article'][i]['article_id']]['article_id'] = data['article'][i]['article_id'];
window.TodayJsonDB[data['article'][i]['article_id']]['title'] = [data['article'][i]['article_title']];
window.TodayJsonDB[data['article'][i]['article_id']]['content'] = [data['article'][i]['article_content']];
window.TodayJsonDB[data['article'][i]['article_id']]['html'] = [data['article'][i]['article_html']];
所以我的问题是;当用户单击 link.
时,如何使用 window.TodayJsonDB[article_id]['html']
的内容显示为页面内容而不是必须执行另一个 JSON 调用
我在代码中的尝试,注释掉了。非常欢迎任何其他关于如何以不同方式处理整个事情的建议。
一如既往的感谢。
n.b。我标记了 Vue,因为我认为它与 Framework7 密切相关。我没有使用 Vue。
找到解决方案,我的工作代码片段如下。我使用相同的异步部分并使用 toString()
将数组输出转换为字符串。似乎只在异步部分工作。
现在可以在开始时为所有内容加载 JSON,一个 JSON 调用。
也许会帮助其他人使用 Framework7。祝你好运!
{
path: '/article/:article_id/',
async: function (routeTo, routeFrom, resolve, reject) {
// Do we already have the JSON for the page?
if (typeof window.TodayJsonDB[routeTo.params.article_id]['html'] != "undefined") {
resolve({
content: (window.TodayJsonDB[routeTo.params.article_id]['html'].toString()),
});
}
else{
// Try and get it
this.app.request.json('/__php/json1.php', { one: 1, article_id: routeTo.params.article_id }, function (data) {
resolve(
{
content: data['article'][0]['article_html'],
},
);
});
}
}
我一开始就有JSON数据加载,也是拉动刷新。在这些时间里,预计会有小的延迟。在页面之间移动时,它应该很活泼,所以我希望将这个已经请求的 JSON 用于我的页面内容。 JSON 对象之一是整个(足够小)html 页面。
我找不到使用它的方法,而是按照示例在加载每个页面(文章)之前发出第二个 JSON get 请求。我宁愿只在开始时加载一次 JSON 数据并使用它直到通过下拉刷新刷新。
* 目前正在工作,但使用第二个 JSON 得到 *
{
path: '/article/:article_id/',
// This works after much turmoil.
// sadly have to do a second json call. could have got with initial.
async: function (routeTo, routeFrom, resolve, reject) {
//Testing
// import('window.TodayJsonDB['+ routeTo.params.article_id +'][\'html\']');
// window.TodayJsonDB[routeTo.params.article_id]['html'];
// [data['article']['article_html']
// console.log(routeTo);
// Get external data and return template7 template
this.app.request.json('/__php/json1.php', { one: 1, article_id: routeTo.params.article_id }, function (data) {
// console.log(data['article'][0]['article_html']);
resolve(
// DOM locked until resolve returned.
// object with resolved route content. Must contain one of:
// url, content, template, templateUrl, component or componentUrl
{
content: data['article'][0]['article_html'],
},
);
});
}
// A day of testin but couldnt figure out how to use existing json feed.
//asyncComponent: () => import('window.TodayJsonDB['+ params.article_id +'][\'html\']'),
//el: window.TodayJsonDB[params.article_id]['html'],
//el: import('window.TodayJsonDB['+ params.article_id +'][\'html\']'),
//template: import('window.TodayJsonDB['+ params.article_id +'][\'html\']'),
//template: import('window.TodayJsonDB[' + params.article_id +'][html]'),
//asyncComponent: () => import('window.TodayJsonDB[' + params.article_id +'][html]'),
//asyncComponent: () => import('window.TodayJsonDB[' + $route.params.article_id +'][html]'),
//asyncComponent: () => import('window.TodayJsonDB[' + {{article_id}} +'][html]'),
//asyncComponent: () => import('window.TodayJsonDB[11][\'html\']'),
//content: window.TodayJsonDB[':article_id']['html'],
},
我已经有了这个 json 已经得到了;应用程序打开时加载并使用下拉更新:window.TodayJsonDB
其中包含:
window.TodayJsonDB[data['article'][i]['article_id']] = new Array();
window.TodayJsonDB[data['article'][i]['article_id']]['article_id'] = data['article'][i]['article_id'];
window.TodayJsonDB[data['article'][i]['article_id']]['title'] = [data['article'][i]['article_title']];
window.TodayJsonDB[data['article'][i]['article_id']]['content'] = [data['article'][i]['article_content']];
window.TodayJsonDB[data['article'][i]['article_id']]['html'] = [data['article'][i]['article_html']];
所以我的问题是;当用户单击 link.
时,如何使用window.TodayJsonDB[article_id]['html']
的内容显示为页面内容而不是必须执行另一个 JSON 调用
我在代码中的尝试,注释掉了。非常欢迎任何其他关于如何以不同方式处理整个事情的建议。
一如既往的感谢。
n.b。我标记了 Vue,因为我认为它与 Framework7 密切相关。我没有使用 Vue。
找到解决方案,我的工作代码片段如下。我使用相同的异步部分并使用 toString()
将数组输出转换为字符串。似乎只在异步部分工作。
现在可以在开始时为所有内容加载 JSON,一个 JSON 调用。
也许会帮助其他人使用 Framework7。祝你好运!
{
path: '/article/:article_id/',
async: function (routeTo, routeFrom, resolve, reject) {
// Do we already have the JSON for the page?
if (typeof window.TodayJsonDB[routeTo.params.article_id]['html'] != "undefined") {
resolve({
content: (window.TodayJsonDB[routeTo.params.article_id]['html'].toString()),
});
}
else{
// Try and get it
this.app.request.json('/__php/json1.php', { one: 1, article_id: routeTo.params.article_id }, function (data) {
resolve(
{
content: data['article'][0]['article_html'],
},
);
});
}
}