关于按需引入的问题

提问 已结 11 462
鬼长
鬼长 2019-8-19
悬赏:20飞吻
版本:layui 浏览器:
按照官网的方法模块化引入了所需要的模块,
A页面引入了a.js,b.js
a.js
layui.use(['form'], function () {
var form = layui.form;
changeForm();
});
b.js
var changeForm = function(){
form.render()
}
但是这样b.js的form一直会提示未定义,想问问这样的逻辑需要怎么样调用比较好?
回帖
  • 你要定义某个模块的
    layui.define(['table'],function(t){
    var changeForm = function(){
    form.render()
    }
    t("b",{ changeForm: changeForm})
    });
    0 回复
  • 鬼长
    2019-8-19
    @执剑断念 也就是说我自己写的所有的公共方法,必须定义在某个模块中,再将这个模块暴露出来,然后才能调用是这个意思嘛?
    0 回复
  • @鬼长 没错,这种方式就类似这样,可以获取这个模块的方法
    layui.use(['b'],function(){

    });
    0 回复
  • 鬼长
    2019-8-19
    @执剑断念 好的感谢!
    0 回复
  • 鬼长
    2019-8-19
    @执剑断念 不好意思还有一个问题想问一下!因为我对模块化的概念很模糊。我现在写的逻辑都是,一个静态页面有一个js,所有与这个页面相关的逻辑都在这个js中处理。
    A页面有一个a.js,按照刚才的方式引入的话,
    a.use(['b'],function(){
    var b = layui.b;
    testA();
    })
    var testA = function(){
    b.function();
    }
    如果这样调用b,还是会报b未定义。因为我不太知道如何去界定这个模块的概念,因为我这个testA方法中肯定有一些特有的逻辑仅仅是在A页面中使用的。如果提取到外部,是没有意义的。如果我把这个方法提到最前面去声明,我又觉得用表达式来声明函数就没有意义了。
    0 回复
  • 你重新申明的函数不能放在use里,这个是异步加载的,定义好的模块最好别有重名的,你可以吧define这个在文档里好好看一遍
    0 回复
  • @鬼长 我项目里就是这么写的,那个banner就是定义的模块
    0 回复
  • 鬼长
    2019-8-19
    @执剑断念 好的,我再去仔细看下。
    我现在的问题就是,A页面已经有一个a.js来处理自己的逻辑了。a.js里面使用了公共模块b中的方法。如果我要写A页面特有的方法,还要再暴露出一个单独的模块才能在a.js中调用嘛?
    0 回复
  • @鬼长 你定义模块那也可互相引定义好的模块
    0 回复
  • 鬼长
    2019-8-19
    @执剑断念 就是我所有的方法一定要写在一个模块里才能使用?
    0 回复