如何将Select2与Electron一起使用(Uncaught TypeError:$(...)。select2不是一个函数)

时间:2019-07-03 13:40:13

标签: electron jquery-select2

我在这里找到了类似的问题:
Uncaught TypeError: $(...).select2 is not a function
但这不适合Electron(这是Electron没有解决方案的另一个问题:https://github.com/select2/docs/issues/17),解决方案是检查jQuery是否加载两次。

如何检查我是否两次加载jQuery?
实际上,当我们在窗口中使用“ nodeIntegration = true”时,这对于Electron中的库来说是一个普遍问题,因为我们需要添加一些技巧:

这是我的代码:

<script>
    window.$ = window.jQuery = require('jquery'); 
    window.Popper = require('popper.js').default;
    window.Bootstrap = require('bootstrap');
    dt = require( 'datatables.net-bs4' )(window, window.$);
    require( 'datatables.net-fixedheader-bs4' )(window, $);
    //require( 'datatables.net-select-bs4' )(window, $);
</script>

<script src="../../js/select2.min.js"></script>

您能看到所有这些丑陋的骇客吗?无论如何,我觉得我没有两次加载jQuery,即使是我,我也在其他所有库之后添加了Select2。
也许是因为我要添加为脚本而不是使用已安装的模块?不能混合它们吗?

更新:
也许问题出在select2.js的这段代码中?

/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */
!function(a) {
    "function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof module && module.exports ? module.exports = function(b, c) {
        return void 0 === c && (c = "undefined" != typeof window ? require("jquery") : require("jquery")(b)),
        a(c),
        c
    }
    : a(jQuery)
}(function(a) {

我不完全了解自己在做什么,但似乎正在检查module.exports,这在Electron窗口中为nodeIntegration = true

是正确的

2 个答案:

答案 0 :(得分:0)

好的,这是问题所在,如果我们在Electron窗口中使用nodeIntegration = true,则需要以这种方式使用require(不是脚本标签)来加载Select2库:

require( 'YOUR PATH TO/select2.min.js' )(jQuery);

答案 1 :(得分:0)

您的解决方案对我不起作用。 可行:

在renderer / main.js中

require('select2')

很容易)

P.S。 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using MovieApp.Models; namespace MovieApp.Controllers { public class HomeController : Controller { private dtsdbEntities _db = new dtsdbEntities(); // GET: Home public ActionResult Index() { return View(_db.IPR_CompanyGen_200200501.ToList()); } // GET: Home/Edit/5 public ActionResult Edit(int id) { var CompanyToEdit = (from m in _db.IPR_CompanyGen_200200501 where (m.CompanyID.Equals(id.ToString())) select m); return View(CompanyToEdit); } // GET: Home/Edit/5 [HttpPost] public ActionResult Edit(IPR_CompanyGen_200200501 CompanyToEdit) { var OriginalCompany = (from m in _db.IPR_CompanyGen_200200501 where (m.CompanyID.Equals(CompanyToEdit.CompanyID.ToString())) select m.First()); _db.Entry(OriginalCompany).CurrentValues.SetValues(CompanyToEdit).First(); _db.SaveChanges(); return RedirectToAction("Index"); } } internal class MoviesDBEntities { } 也可以。