在 mithril.js

问题描述

我想在 mithril.js 中的 oninit 函数内设置一个属性。例如,

m('img',{
    oninit: (vnode) => {
        vnode.attrs.src = 'A url string';
    }
})

我想在设置此属性之前检查某些条件,我宁愿不使用三元运算符,因为那样会变得混乱。上面的示例成功了一半,在记录 vnode 时,attrs 对象具有正确的 src 字符串,但是在 DOM 中,src 设置为 null某种原因。

我正在寻找一个简单的解决方案,而不是像给元素一个 id 并用它来更改属性之类的东西。

解决方法

当使用闭包组件时,这些代码通常可以作为方法或函数放置在组件中。

这是在一个仅用于图像的组件中,但可以在直接呈现该 IMG 的父组件中完成此类工作。

function DynamicImg() {
  function imageAttrs(vnode) {
    let src = 'configurable';
    return {src: src};
  }
  return {
    view: function (vnode) {
        return m('img',imageAttrs(vnode));
    }
  }
}

在 init 中设置 attr 不会持续,因为没有它会立即调用视图函数。因为它在每次渲染时都会被调用。

,

对于任何寻求解决方案的人来说,这对我有用。

m('img',{
    src: (() => {
        return 'A url string';
    })()
})

你可以在别处定义函数并调用它。