停止mithrill重绘第一个动作

时间:2018-05-03 16:27:06

标签: mithril.js

我正在使用秘银编写单页应用程序。该页面使用主要组件的on.it中的m.request()从服务器加载一些数据:

var root = document.getElementById("main");
var Data = {
        fetch: function () {
            m.request({
                method: "GET",
                url: "/api/read"
            })
                .then(function (items) {
                    // init models with data
                });
    }
}

var Home = {
    oninit: Data.fetch,
    view: function (vnode) {
        return m("div", [components]);
    }
}

m.route(root,
    "/",
    {
        "/": Home
    });

数据是一个巨大的json,该页面是通过确保满足某些外键约束来帮助编辑json,并使其更好地可视化。一切都按预期工作,直到调用一个组件,实际上为我拥有的任何json对象添加一个全新的条目。在此阶段页面重新加载,数据再次被提取,因此我丢失了所有更改。它只发生过一次,只发生在这个电话上:

jsonModel[propertyName].push(JSON.parse(newObject))

在第一次重绘之后,我可以根据需要修改页面,这个问题不会再发生了。我甚至可以在没有它的情况下刷新。

我在结构中做了一些根本错误的事情吗?可以防止这种刷新吗?

2 个答案:

答案 0 :(得分:2)

听起来您想在event.preventDefault() onclick处理程序中调用<button>,以防止它自动提交表单。

您可以采取其他一些方法,但这将是最简单的方法。

答案 1 :(得分:0)

我发现了问题,但实际错误未包含在问题中:触发操作的组件是一个按钮。此按钮放置在表单标记中,由于某种原因只触发了一次提交。 Here's the code会重现这个问题。

有趣的是,在Edge中尝试时,它几乎总是刷新。如果有人知道的话,我仍然会感兴趣为什么它只在Chrome上执行过一次?