Mithril.js 多个 css class
Mithril.js multiple css class
我是 mithril.js 的新人。我有一个 div,如果 ctrl.invalid()==true,我想添加 class "invalid",如果 ctrl.hidden()=,我想添加 "hidden" =真。
如果我使用 m('div', {class: ctrl.invalid() ? 'invalid' : '', class: ctrl.hidden()? 'hidden' : ''})
,它们会相互覆盖。
我可以使用 m('div', {class: [ctrl.invalid()?'invalid':'', ctrl.focused()?'focused':''].join(' ')})
,它会工作,但它看起来很乱。
有没有优雅的解决方案?谢谢。
我建议您使用 classnames - 一个简单的实用程序。您可以以一种很好的方式定义 类,它会为您合并所有内容。在你的情况下它将是:
const myMergedClasses = classNames({
invalid: ctrl.invalid(),
focused: ctrl.focused()
});
m('div', { class: myMergedClasses })
漂亮吗?!
您可以向您的 Mithril 组件添加辅助方法:
const myComponent = {
css() {
// Add some logic
return 'class1 class2';
},
view() {
return m('div', { class: this.css() });
},
};
或控制器:
const ctrl = {
css() {
// Add some logic
return 'class3';
},
};
const myComponent = {
view() {
return m('div', { class: ctrl.css() });
},
};
选择更适合您的情况。
您也可以使用类名实用程序,正如 Ross Khanas 在他的回答中所建议的那样:
const myComponent = {
css() {
return classNames({
invalid: ctrl.invalid(),
focused: ctrl.focused(),
});
},
view() {
return m('div', { class: this.css() });
},
};
或者:
const ctrl = {
css() {
return classNames({
invalid: this.invalid(),
focused: this.focused(),
});
},
invalid() { /* ... */ },
focused() { /* ... */ },
};
const myComponent = {
view() {
return m('div', { class: ctrl.css() });
},
};
游戏已经很晚了,但作为对其他人在这里结束的灵感,我经常做类似下面的事情,只是因为它是:
- 易于实施
- 易于扩展
- 通俗易懂
view(): {
const classes =
`${ctrl.invalid() ? '.invalid' : ''}` +
`${ctrl.hidden()? '.hidden' : ''}`;
return m(`div${classes}`);
}
我是 mithril.js 的新人。我有一个 div,如果 ctrl.invalid()==true,我想添加 class "invalid",如果 ctrl.hidden()=,我想添加 "hidden" =真。
如果我使用 m('div', {class: ctrl.invalid() ? 'invalid' : '', class: ctrl.hidden()? 'hidden' : ''})
,它们会相互覆盖。
我可以使用 m('div', {class: [ctrl.invalid()?'invalid':'', ctrl.focused()?'focused':''].join(' ')})
,它会工作,但它看起来很乱。
有没有优雅的解决方案?谢谢。
我建议您使用 classnames - 一个简单的实用程序。您可以以一种很好的方式定义 类,它会为您合并所有内容。在你的情况下它将是:
const myMergedClasses = classNames({
invalid: ctrl.invalid(),
focused: ctrl.focused()
});
m('div', { class: myMergedClasses })
漂亮吗?!
您可以向您的 Mithril 组件添加辅助方法:
const myComponent = {
css() {
// Add some logic
return 'class1 class2';
},
view() {
return m('div', { class: this.css() });
},
};
或控制器:
const ctrl = {
css() {
// Add some logic
return 'class3';
},
};
const myComponent = {
view() {
return m('div', { class: ctrl.css() });
},
};
选择更适合您的情况。
您也可以使用类名实用程序,正如 Ross Khanas 在他的回答中所建议的那样:
const myComponent = {
css() {
return classNames({
invalid: ctrl.invalid(),
focused: ctrl.focused(),
});
},
view() {
return m('div', { class: this.css() });
},
};
或者:
const ctrl = {
css() {
return classNames({
invalid: this.invalid(),
focused: this.focused(),
});
},
invalid() { /* ... */ },
focused() { /* ... */ },
};
const myComponent = {
view() {
return m('div', { class: ctrl.css() });
},
};
游戏已经很晚了,但作为对其他人在这里结束的灵感,我经常做类似下面的事情,只是因为它是:
- 易于实施
- 易于扩展
- 通俗易懂
view(): {
const classes =
`${ctrl.invalid() ? '.invalid' : ''}` +
`${ctrl.hidden()? '.hidden' : ''}`;
return m(`div${classes}`);
}