2015-12-21 70 views
0

我有這樣的例子:爲什麼視圖不能在Mithril中使用m.request重繪?

controller : function() { 
    var responseFolder = m.prop(""); 
    var pathDirectory = m.prop("C://");` 

    function clickChangeFolder(folder) { 
     pathDirectory(pathDirectory() + folder + "/"); 
     responseFolder(m.request({ 
      method : "GET", 
      url : "my url", 
      data : {root:pathDirectory()} 
     })); 
    } 
    return { 
     responseFolder: m.request({ 
      method : "GET", 
      url : "http://localhost:8080/Mithril_directory/GetFolders", 
      data : {root:pathDirectory()} 
     }), 
    } 

view : function(ctrl) { 
    return [ 
     m("ul" , ctrl.responseFolder().map(function(folder) { 
      return [ 
       m("li.liFolder" , { 
        onclick : ctrl.clickChangeFolder.bind(null, folder.name) 
       }, 
       folder.name), 
      ]; 
     }) 
]} 

第一次要求是確定的,但是當我在文件夾中單擊第二個請求是確定,但認爲沒有重繪,爲什麼呢?

回答

1

the mithril documentation

m.request的基本使用模式返回m.prop消氣部件設置器, AJAX請求完成時被填充。

那麼你的代碼的情況是,控制器的回報對象,ctrl.responseFolderm.prop有無關之前聲明的變量responseFolder

爲了在每次點擊後重新繪製視圖,您需要將初始請求分配給responseFolder,以便它將成爲getter-setter,然後將其返回給視圖,該視圖將在每個視圖上重新呈現新的請求。

var responseFolder = m.request({...}); 
... 
return { 
    responseFolder: responseFolder, 
    ... 
}; 
+0

讓我們[在聊天中繼續討論](http://chat.stackoverflow.com/rooms/98726/discussion-between-irrech-and-vier)。 – Irrech

相關問題