0

我有这个例子:

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), 
           ];
      })
 ]}

第一次请求没问题,但是当我点击文件夹时,第二个请求没问题,但视图没有重绘,为什么?

4

1 回答 1

1

秘银文档中,

m.request返回一个m.propgetter-setter的基本使用模式,它在 AJAX 请求完成时填充。

因此,您的代码发生的情况是,在控制器的返回对象上,与之前声明ctrl.responseFolder的变量m.prop无关。responseFolder

为了在每次点击后重新绘制视图,您需要将初始请求分配给responseFolder,因此它将成为一个getter-setter,然后将其返回给视图,该视图将在每次新请求时重新渲染。

var responseFolder = m.request({...});
...
return {
    responseFolder: responseFolder,
    ...
};
于 2015-12-21T23:21:01.460 回答