2

见下文。

首先,该脚本从 Github API 获取 4 个项目并呈现一个列表。如果您提交“NEXT”按钮,脚本会在重新发送 Get 请求后重新绘制列表。

获取请求。

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

连接数组。

repo.vm.api(links['next'])
return m('button', {onclick: repo.vm.add}, 'NEXT');

它按预期工作。但是,这是不好的解决方案,不是吗?我认为这个 concat 过程应该在 View-Model (repo.vm) 中完成。

有什么好的方法吗?或者这样可以吗?

4

1 回答 1

1

修改view方法中的内容并不理想。将视图视为一个模板,它应该只显示状态,因为重绘可以很快发生。相反,您应该让控制器执行请求,并在请求完成时修改状态。然后将显示视图。

在代码方面,我认为您对“结构过多”有点深入。有视图模型、LinkHeader原型,程序流到处跳跃。心智模型非常简单,因此请保持这种方式,而不是陷入只会使事情变得抽象和复杂的模式。

这是我的看法:https ://jsfiddle.net/ciscoheat/akwdqhpx/

解析器是一样的,但在那之后我试图保持代码压缩和本地化,这样你就可以看一部分代码并理解它。这是一篇关于局部性和凝聚力的非常好的文章。我还更改了一些名称以更接近心智模型。

于 2015-11-21T01:13:29.263 回答