我有这个例子:
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/