防止秘银重绘

时间:2017-10-17 20:57:43

标签: mithril.js

我为mithril做了一个简单的FlashMessage模型,我用它来显示表单的反馈(例如成功保存):

// the model
var FlashMessage = {
    messages: [],

    clear: function()
    {
        FlashMessage.messages = [];
    },

    add: function(level, message)
    {
        var mess = {level:level, message: message};
        FlashMessage.messages.push(mess);
    },

    get: function()
    {
        var messages = FlashMessage.messages;
        FlashMessage.clear();
        return messages;
    }
};

module.exports = FlashMessage


// the use
m('section.flash-messages', FlashMessage.get().map(function(mess){return m('.message-' + mess.level, mess.message);}))

保存数据时,布局会显示闪存消息,但是只要我在表单上再次将数据输入到输入中,闪存消息div就会重新绘制,并且因为get方法会删除数据,闪光消息消失。这是因为根据我的理解,当数据发生变化时,秘银重绘,但我该如何防止这种情况?

1 个答案:

答案 0 :(得分:0)

正如我将向您展示的那样,防止重绘很简单,但在您的情况下,这不是一个好的解决方案。相反,你应该改变你对国家的看法。

防止重绘

只需向您的组件添加一个函数onbeforeupdate,如果您不想更新,则返回false。

var Component = {
    onbeforeupdate: function (vnode, old) {
        var shouldUpdate = ???;

        return shouldUpdate;
    }
    ...
};

考虑状态

应用的状态应始终反映在用户界面中。如果状态发生变化, 显示的内容也应该改变。这是React和所有的核心原则 它启发的图书馆,其中包括秘银。这样做就可以了 易于编写有状态的应用程序,这就是这些库很受欢迎的原因。

以任何其他方式这样做是非常糟糕的做法。 你将很难使它正常工作, 不仅因为[Mithril]旨在确保状态更新始终反映在UI中, 但也因为很难推理。 (另外,你的代码对其他人没有意义。)

在您的情况下

如果您希望留言,他们也应留在州内。

只有当您希望消息(屏幕上)消失时,才应将其从状态中删除。

请发一个新问题,解释你想要达到的目标,我会告诉你如何做到这一点:)