我有这个例子:

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


第一次请求是好的,但是当我单击文件夹中的第二个请求是好的,但是视图没有重绘时,为什么呢?

最佳答案

the mithril documentation


  m.request的基本用法模式返回一个m.prop getter-setter,
  当AJAX请求完成时填充。


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

为了使视图在每次单击后重绘,您需要将初始请求分配给responseFolder,这样它将成为一个getter-setter方法,然后将其返回到视图,该视图将在每次新请求时重新呈现。

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

关于javascript - 为什么在 Mithril 中不使用m.request重绘 View ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34391905/

10-12 16:24