javascript - 如何在 maquettejs 中的映射组件中使用函数

标签 javascript mapping frontend maquette

当我尝试在 createMapping 组件中使用函数时遇到问题,这是代码

itemConcurso.js

import {h, createMapping} from 'maquette';

    function enterAnim(domNode, properties) {
        domNode.className += ' animated fadeInUp';
    }

    const item = createMapping(
        function getSourceKey(source) {
            console.log(source);
            return source;
        },
        function createTarget(item, i) {
            return (func) => {

                const helper = () => { func(item.Id) };

                return {
                    renderMaquette: function() {
                        return h(`ul#${item.Id}.item-concurso.list-group.mt-3`, { key: item.Id, enterAnimation: enterAnim, onclick: helper}, [
                            h('li.list-group-item.list-group-item.list-heading-primary', [
                                h('div.pull-right', [
                                    h('h4', item.Ministerio__c)
                                    ]), 
                                h('h3', item.Name.toUpperCase())
                                ]),
                            h("li.list-group-item", [   
                                h('h4', item.activity),
                                h('ul', [
                                    h('li', ['Perfil buscado: ', item.Nombre_de_perfil__c]),
                                    h('li', ['Conocimientos requeridos: ', item.Conocimientos_tecnicos_requeridos__c]),
                                    h('li', ['Descripción: ', item.Descripcion__c]),
                                    ])  
                                ])
                            ]);
                    }
                }
            };
        },
        function updateTarget(updatedSource, target) {
            console.log(updatedSource);
        });

    export default item;

App.js

function probando(id) {
    console.log(id);
}

const app = function() {
    return {
        renderMaquette: function() {
            return h('div#concurso', [
                searchB.renderMaquette(),
                itemConcurso.results.map(function(component) {
                    return component(test).renderMaquette();
                })]);
        }
    }
}

它确实有效,但在我第一次单击该组件时它抛出以下错误:

vendor.bundle.js:15132 Uncaught Error: Functions may not be updated on subsequent renders (property: onclick). Hint: declare event handler functions outside the render() function.
    at updateProperties (vendor.bundle.js:15132)
    at updateDom (vendor.bundle.js:15370)
    at updateChildren (vendor.bundle.js:15241)
    at updateDom (vendor.bundle.js:15369)
    at Object.update (vendor.bundle.js:15393)
    at doRender (vendor.bundle.js:15636)

我尝试了很多东西,但似乎有一点我不明白

最佳答案

代码的问题是 createTarget 返回一个函数,该函数在 app.renderMaquette 期间生成新的 {renderMaquette: ...} 实例>.

因为这些实例是新的,所以创建了一个新的助手,因此出现了错误。

如果你想将一个函数传递给项目,你可以导出一个函数 createItem(func) 而不是 export default item

关于javascript - 如何在 maquettejs 中的映射组件中使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46041813/

相关文章:

javascript - 一旦我再添加 1 个变量,函数就会停止工作?基于像素颜色为图像添加边界

javascript - 使用 JSON 对象与 localStorage/sessionStorage/IndexedDB/WebSQL/等?

java - 如何解决 hibernate 中的目标未映射类错误?

html - Bootstrap 覆盖了我的样式

javascript - 如何更改 li 标签内的特定组件(react js);

javascript - 如何从 Safari 4 的 Javascript 调试器中删除断点?

javascript - 如何为 Firebase 数据库中的每个人设置唯一 ID,以便在多个人同名时我可以选择删除哪个 ID?

javascript - 热模块重新加载有什么意义?

python - 将值从 Pandas 中的不同数据帧映射到数据帧

mapping - ElasticSearch 映射 Charfilter