Mithril.js有多个GET请求

时间:2015-12-28 02:54:22

标签: javascript json ajax github-pages mithril.js

我的项目最初是在Angular,you can see it on GitHub still。但是我试图改用秘银。

我在data.json文件上调用请求(从GitHub Pages提供),这只是按日期排序的事件列表(在编译时排序)。整个文件的加载时间有点质疑,而且只会变得更糟。

我的初始解决方案是尝试加载较小的初始数据子集(通过另一个文件),然后加载其余文件,但我不知道如何使用Mithril。 (此外,如果数据有任何相关性,我最终需要对数据进行一些计算。如添加属性来标记年份和月份边界。)

当前相关代码只是this.eventlist = m.request({method: "GET", url: "data.json"});坐在控制器中。任何有关我如何在秘银行中做到这一点的建议(或任何有关更好主意的建议)都将不胜感激。

这是我到目前为止的代码:

"use strict",
(function(){
  var app = {};

  app.controller = function() {
    this.eventlist = m.request({method: "GET", url: "data.json"});
  };

  app.view = function(controller) {
    return m("ul", [
      controller.eventlist().map(function(item){
        console.log(item);
        return m("li", [
          m("a", {href: item.url}, item.name),
          m("div", item.description)
        ]);
      })
    ]);
  };

  m.module(document.body, app);

})();

1 个答案:

答案 0 :(得分:1)

我重构了你的控制器,所以它有几个请求函数; init在启动时被调用,一旦它结算rest就被调用。

app.controller = function () {
    // changed from this. to var so it's accessible inside the then function
    var eventlist = m.prop([]);

    // load initial data
    var init = function () {
        m.request({method: "GET", url: "first-data.json"}).
            // assign the result to the getter/setter
            then(eventlist).
            // send the request for the rest of the data
            then(rest)
        ;
    };

    // load the rest of the data
    var rest = function () {
        m.request({method: "GET", url: "rest-of-data.json"}).
            // concat the resulting array with the current one
            then(function (result) {
                eventlist(
                    eventlist().concat(result)
                );
            })
        ;
    };

    init();

    // return the eventlist so the view can access it
    return {
        eventlist: eventlist
    }
};