framework7 从ajax获取数据然后刷新

转载自:http://www.680.com/Web/1609/webedit-43324.html

 简单地介绍了 Template7 模板页面的使用。当时模板页面里的列表数据是在 Framework7 初始化的时候就定义好的。

framework7 从ajax获取数据然后刷新

  但实际开发中,页面数据并不都是一直不变的。而是通过 ajax 请求从外部,或者远程服务器上获取数据。


  假设我们有个外部数据要加载:news.json


  {


  "title": "最新资讯",


  "news": [


  {


  "title": "欢迎访问hangge.com",


  "date": "08-20"


  },


  {


  "title": "Framework7页面缓存设置",


  "date": "08-19"


  },


  {


  "title": "奥运健儿勇夺金牌",


  "date": "08-19"


  }


  ]


  }


  如何将获取到的数据填充到 Template7 页面上,通常有下面两种方法。


  方法1:


  在 Framework7 初始化 preprocess 方法中,对加载列表页面这个路由事件进行捕获。先通过 ajax 获取数据,数据获取后使用模板进行填充后再继续显示。


  // 初始化 app


  var myApp = new Framework7({


  precompileTemplates: true,


  template7Pages: true, //pages启用Template7


  template7Data: {


  },


  preprocess: function (content, url, next) {


  //判断如果是跳转到列表页面


  if(url.indexOf("list.html")>=0){


  //先获取数据


  $$.getJSON("data/news.json", function (data) {


  console.log(data);


  //模板编译


  var compiledTemplate = Template7.compile(content);


  //模板数据加载


  next(compiledTemplate(data));


  });


  }else{


  //其他页面按正常流程走


  next(content);


  }


  }


  });


  方法2:


  同样是先在 preprocess 方法中,对加载列表页面这个路由事件进行捕获。通过 ajax 获取数据后,将获取到的数据放到 Template7 上下文数据中。再继续加载页面。


  // 初始化 app


  var myApp = new Framework7({


  precompileTemplates: true,


  template7Pages: true, //pages启用Template7


  template7Data: {


  },


  preprocess: function (content, url, next) {


  //判断如果是跳转到列表页面


  if(url.indexOf("list.html")>=0){


  //先获取数据


  $$.getJSON("data/news.json", function (data) {


  console.log(data);


  //设置上下文数据


  Template7.data["page:list"] = data;


  //页面继续跳转


  next(content);


  });


  }else{


  //其他页面按正常流程走


  next(content);


  }


  }


  });


  方法3:


  不从链接直接跳转。而是在链接的 click 事件里先加载数据,数据加载完毕后将获取到的数据放到 Template7 上下文数据中。最后再加载列表页。


  (1)首页跳转链接 href 设为 #


  <a href="#" class="open-list">打开列表页面</a>


  (2)js相关代码


  // 初始化 app


  var myApp = new Framework7({


  precompileTemplates: true,


  template7Pages: true, //pages启用Template7


  template7Data: {


  }


  });


  // 为便于使用,自定义DOM库名字为$$


  var $$ = Dom7;


  // 添加首页视图


  var mainView = myApp.addView('.view-main', {


  // 让这个视图支持动态导航栏


  dynamicNavbar: true


  });


  //跳转链接点击


  $$('.open-list')。on('click', function () {


  //先获取数据


  $$.getJSON("data/news.json", function (data) {


  console.log(data);


  //设置上下文数据


  Template7.data["page:list"] = data;


  //页面跳转


  mainView.router.loadPage("list.html");


  });


  });