我为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方法会删除数据,闪光消息消失。这是因为根据我的理解,当数据发生变化时,秘银重绘,但我该如何防止这种情况?
答案 0 :(得分:0)
正如我将向您展示的那样,防止重绘很简单,但在您的情况下,这不是一个好的解决方案。相反,你应该改变你对国家的看法。
只需向您的组件添加一个函数onbeforeupdate
,如果您不想更新,则返回false。
var Component = {
onbeforeupdate: function (vnode, old) {
var shouldUpdate = ???;
return shouldUpdate;
}
...
};
应用的状态应始终反映在用户界面中。如果状态发生变化, 显示的内容也应该改变。这是React和所有的核心原则 它启发的图书馆,其中包括秘银。这样做就可以了 易于编写有状态的应用程序,这就是这些库很受欢迎的原因。
以任何其他方式这样做是非常糟糕的做法。 你将很难使它正常工作, 不仅因为[Mithril]旨在确保状态更新始终反映在UI中, 但也因为很难推理。 (另外,你的代码对其他人没有意义。)
如果您希望留言,他们也应留在州内。
只有当您希望消息(屏幕上)消失时,才应将其从状态中删除。
请发一个新问题,解释你想要达到的目标,我会告诉你如何做到这一点:)