2015-12-28 160 views
0

我的項目最初是在Angular,you can see it on GitHub still。但我正在嘗試切換到祕銀。Mithril.js與多個GET請求

我在data.json文件(從GitHub Pages提供)上調用請求,它只是按日期排序的事件列表(在編譯時排序)。整個文件的加載時間變得有點可疑,並且只會變得更糟。

我最初的解決方案是嘗試加載數據的較小的初始子集(通過另一個文件),然後加載其餘的,但我不知道如何與祕銀做到這一點。 (另外我最終需要在數據輸出之前對數據進行一些計算,如果它有任何相關性的話,就像添加屬性來標記年月邊界一樣)。

當前相關代碼只是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); 

})(); 
+0

你能提供一些代碼來說明你到目前爲止得到了什麼嗎? – fluminis

+0

你所追求的建議並非最適合StackOverflow問答格式 - 在[Mithril聊天室](https://gitter.im/lhorie/mithril.js)上討論你的情況可能會更好) – Barney

+0

完整代碼已添加 – jshwlkr

回答

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 
    } 
};