例如,我正在處理Symfony實體更新成功完成時出現的通知。多物料設計lite小吃店時序錯誤
什麼我現在做的是在這裏(+的jsfiddle:https://jsfiddle.net/atierant/6e0s4rk1/15/):
var messagesTypes = {
"notice": ["This is a green NOTICE"],
"error": ["This is a red ERROR"],
"warning": ["This is a yellow WARNING"],
"info": ["This is a blue INFO"]
};
var colorType = {
"info": {
"class": "mdl-color--blue-400",
"icon": "done"
},
"error": {
"class": "mdl-color--red-400",
"icon": "error"
},
"warning": {
"class": "mdl-color--amber-400",
"icon": "warning"
},
"notice": {
"class": "mdl-color--green-400",
"icon": "done"
}
};
(function() {
'use strict';
var snackbarContainer = document.querySelector('#snackbar');
var timeout = 2000;
var actionText = 'Ok';
var handler = function(event) {};
// elements.forEach(element => { }) correcpond à for(var element in elements)
// infoType est un objet qui correspond à un parcours de boucle
Object.keys(messagesTypes).forEach(infoType => {
// Définition de l'objet à donner à manger à la SnackBar
var objTest = {};
objTest = {
class: colorType[infoType].class,
icon: colorType[infoType].icon,
message: messagesTypes[infoType].toString(),
type: infoType,
timeout: timeout,
actionHandler: function(event) {},
actionText: actionText
};
// Retrait d'une éventuelle classe existante dans la liste
// Pour chacune des classList, si elle matche le pattern je la vire
var re = new RegExp(/(^|\s)mdl-color--\S+/, "gi");
for (var i = 0, len = snackbarContainer.classList.length; i < len; i++) {
// ma classe en cours
var currentClass = snackbarContainer.classList[i];
// Je réalise mon test
var result = re.test(currentClass);
// Trace pour voir si je matche ma regex
console.log('Je traite : ', currentClass, ' resultat ', result);
if (result === true) {
snackbarContainer.classList.remove(currentClass);
}
};
snackbarContainer.classList.add(objTest.class);
snackbarContainer.MaterialSnackbar.showSnackbar(objTest);
/*setTimeout(function() {
snackbarContainer.MaterialSnackbar.showSnackbar(objTest);
}, 5000);*/
});
})();
function r(f) {
/in/.test(document.readyState) ? setTimeout('r(' + f + ')', 9) : f();
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/material-design-lite/1.1.1/material.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/material-design-lite/1.1.1/material.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="snackbar" class="mdl-js-snackbar mdl-snackbar">
<div class="mdl-snackbar__text"></div>
<button class="mdl-snackbar__action" type="button"></button>
</div>
根據服務器發送警報類型(錯誤,警告,通知,信息),我嘗試更改出現的Material Design Lite零食欄的類,以更改它的顏色。
我刪除mdl-color--{color}-*
類,如果它存在,我會根據正確的類型應用一個新的mdl-color
類。
messageTypes
是諸如Symfony返回(在FlashBag系統中)的消息。
colorType
是匹配的類。
對於這些消息中的每一個,我都會用類和消息更新現有的小吃店。
然後我叫小吃吧,因爲這裏記載:https://getmdl.io/components/#snackbar-section
現在,我有時序問題。它首先對班級進行了所有更改,然後用隨機消息和最後一個顏色班級來顯示小吃店的怪異方式。
removeClass
addClass
removeClass
addClass
removeClass
addClass
removeClass
addClass
然後
顯示小吃吧與消息1
顯示小吃吧與消息2
顯示小吃吧與消息3
顯示小吃吧與消息4
如何可以按此順序設置:
removeClass
addClass
顯示小吃吧與消息1
removeClass
addClass
顯示小吃吧與消息2
removeClass
addClass
帶消息3的顯示快餐欄
個 removeClass
addClass
顯示小吃吧與消息4
謝謝!這是我所做的,你對此有何想法? http://jsfiddle.net/atierant/qds0p29v/ – atierant