见下文。
首先,脚本从Github API获取4个项目并呈现列表。如果您提交“下一步”按钮,则脚本会在重新发送获取请求后重新绘制列表。
获取请求。
repo.Repo.getList = function (api) {
return m.request({
method: "GET",
url: api,
type: repo.Repo,
extract: repo.linkHeader.setLinkHeader,
initialValue: []
})
.then(function (data) {
// bad solution.
return repo.vm.list(repo.vm.list().concat(data));
});
};
Concat数组。
repo.vm.api(links['next'])
return m('button', {onclick: repo.vm.add}, 'NEXT');
它的工作方式与预期一致。但是,这是不好的解决方案,不是吗?我认为 这个concat过程应该在View-Model(repo.vm)中完成。
有什么好方法吗?或者这样可以吗?
答案 0 :(得分:1)
修改view
方法中的内容并不理想。考虑视图模板,该模板应该只显示状态,因为重绘可以非常快速地发生。相反,您应该让控制器执行请求,并在请求完成时修改状态。然后将显示视图。
代码方面,我认为你已经深入了解了太多的结构"。有视图模型,LinkHeader
原型,程序流遍布整个地方。心理模型非常简单,所以要保持这种方式,而不是进入只会使事情变得抽象和复杂的模式。
以下是我对此的看法:https://jsfiddle.net/ciscoheat/akwdqhpx/
解析器是相同的,但之后我尝试将代码保持压缩和本地化,因此您可以查看部分代码并理解它。这是一篇关于locality and cohesion的非常好的文章。我也改变了一些名字,以便更接近心理模型。