Rails6中JqTree如何与webpacker集成,tree不是函数
How to integrate JqTree in Rails 6 with webpacker, tree is not a function
我真的很想知道如何将 jqTree 作为 webpacker webpack 集成到我的 Rails 6 应用程序中
更新:-
使用 yarn add jqtree 似乎神奇地解决了我的大部分问题,但是我目前面临 tree is not a function 错误
我正在使用 Ancestry gem 来组织菜单项,我需要一个拖放 javascript 树视图解决方案,它可以很好地与 Ancestry gem 配合使用。我选择了 jqTree 作为我想要的解决方案,但我很高兴被说服使用替代方案,因为周围似乎有很多但最初我只是希望至少能够在 Rails 6
大概我必须从设置 jQuery 开始,关于如何执行此操作的资源很多,所以我想这更多是关于如何设置任何 jQuery 组件和 运行在 Rails 6 个应用中
我想我必须从一个 jsx 文件开始并导入一些东西并将一些 css 导入 application.scss 但是我真的不确定这应该是什么样子
到目前为止,我已经根据这里的说明设置了 jQuery https://www.botreetechnologies.com/blog/introducing-jquery-in-rails-6-using-webpacker
我可以通过一个简单的警报确认这一切都已连接并正常工作
我又进步了一些
我没有下载 jqTree 文件,而是使用 yarn 安装 jqTree
替换
我已经下载了 jqTree 文件并将它们解压到我的 javascript/packs 文件夹中名为 jqTree 的文件夹中
和
yarn add jqtree
现在我已经整理出了没有 ; 的要求。
所以
require ;'jqTree/tree.jquery.js'
变成
require('jqtree')
我还在我的 javascript/packs 文件夹中创建了一个 sortable.js 文件,其中确实包含以下内容
require ;'jqTree/tree.jquery.js'
jQuery(window).on('load', function () {
alert("Done"); //This works!
});
$(function() {
$('#tree1').tree({
data: data,
autoOpen: true,
dragAndDrop: true
});
})
;在 require 语句中让我很困惑,但控制台错误要求它
现在看起来像这样
require("jqtree");
$(function() {
alert($('#tree1').data('items'));
});
$('#tree1').tree({
data: $('#tree1').data('items'),
autoOpen: true,
dragAndDrop: true
});
使用上面的代码我得到一个引用错误:数据未定义
在一个视图中,我有以下代码
<%=javascript_pack_tag("sortable")%>
<%= content_tag "div", id: "tree1", data: {items: @menu_items} do %>
Loading items...
<% end %>
我现在遇到的问题是我的浏览器报告错误,树不是一个函数。
在我的 application.css.scss 我有
*= require "jqtree.css"
哪个不起作用
我有一个详细的答案,花了我 quite 的时间整理,我将在未来几天用这个细节更新这个答案,但首先要正确连接所有内容jQuery、jQuery-ui 和组件本身,在本例中是 jqTree
纱线绝对是答案
从命令行开始添加相关包
yarn add jquery
yarn add jquery-ui
yarn add jqtree
一旦安装了相关的 yarn 包,我需要使 jQuery 和 jQuery-ui 可用,原因我还没有完全理解,一个简单的 require 不够
关注这个posthttps://www.botreetechnologies.com/blog/introducing-jquery-in-rails-6-using-webpacker
我将 config/webpacker
文件夹中的 environment.js 文件设置为如下所示
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
);
const aliasConfig = {
'jquery': 'jquery-ui-dist/external/jquery/jquery.js',
'jquery-ui': 'jquery-ui-dist/jquery-ui.js'
};
environment.config.set('resolve.alias', aliasConfig);
module.exports = environment
重新启动服务器后,我在 app/javascript/packs
文件夹中创建了一个名为 test.js 的简单 js 文件,据我所知这是所有 javascript 现在所在的位置,尽管仍然存在通过将 javascript 放在 assets/javascript
文件夹中来使用 sprockets 的可能性,我被告知,没有解释为什么,将 webpacker 与 sprockets 混合用于服务 [=62 不是一个好主意=].
Webpacker 确实也有提供样式表的能力,但是我仍然更喜欢我的样式表由 app/assets 文件夹中的链轮提供,并使用样式表 link 标签,就像 Rails 应用程序中的传统做法一样测试证明这种方式更有效,因此以这种方式将 sprockets 与 webpacker 混合似乎不是问题。
我只是在 test.js 文件中添加了一条简单的警报消息,只是为了检查 webpacker 和 jQuery 是否已正确连接。
所以test.js看起来像这样
require("jquery-ui");
require("jqtree");
$(function() {
alert($('#tree1').data('items'));
});
然后使用 javascript 我只是在视图中包含了一个 javascript pack 标签,我想像这样使用它。
在随机 edit.html.erb 视图中
<h1>Editing Menu Item</h1>
<%= render 'form', menu_item: @menu_item %>
<%= link_to 'Show', [:admin, @menu_item] %> |
<%= link_to 'Back', admin_menu_items_path %>
<%=javascript_pack_tag("test")%>
不需要文件名的路径或扩展名,它就可以工作!
我发现这种方法非常简洁,原因有两个
1) 通过将特定页面 javascript 包含在每个页面中,将其包含在默认情况下包含在布局中的 application.js 文件中,我并没有不必要地膨胀网页每页。
2) 我似乎不必担心 DOM 加载的事件,并且到目前为止没有 turbolinks 干扰它的问题,尽管我怀疑这可能更靠运气比 judgement 和我可能不得不在未来修改那个想法并利用 'data-turbolinks-track': 'reload'
选项,但到目前为止一切顺利,这不是必需的。
所以现在一切都已连接并开始工作,是时候让 jqTree 组件与祖先一起工作 gem 以便能够构建和组织站点的菜单项,
但到目前为止,使用 yarn top install 组件并正确连接 jQuery 是一件简单的事情。我最初没有使用纱线,这导致我遇到了各种各样的问题,导致了我原来的问题。
剩下的就是后续了...
我真的很想知道如何将 jqTree 作为 webpacker webpack 集成到我的 Rails 6 应用程序中
更新:- 使用 yarn add jqtree 似乎神奇地解决了我的大部分问题,但是我目前面临 tree is not a function 错误
我正在使用 Ancestry gem 来组织菜单项,我需要一个拖放 javascript 树视图解决方案,它可以很好地与 Ancestry gem 配合使用。我选择了 jqTree 作为我想要的解决方案,但我很高兴被说服使用替代方案,因为周围似乎有很多但最初我只是希望至少能够在 Rails 6 大概我必须从设置 jQuery 开始,关于如何执行此操作的资源很多,所以我想这更多是关于如何设置任何 jQuery 组件和 运行在 Rails 6 个应用中 我想我必须从一个 jsx 文件开始并导入一些东西并将一些 css 导入 application.scss 但是我真的不确定这应该是什么样子
到目前为止,我已经根据这里的说明设置了 jQuery https://www.botreetechnologies.com/blog/introducing-jquery-in-rails-6-using-webpacker
我可以通过一个简单的警报确认这一切都已连接并正常工作
我又进步了一些 我没有下载 jqTree 文件,而是使用 yarn 安装 jqTree
替换
我已经下载了 jqTree 文件并将它们解压到我的 javascript/packs 文件夹中名为 jqTree 的文件夹中
和
yarn add jqtree
现在我已经整理出了没有 ; 的要求。 所以
require ;'jqTree/tree.jquery.js'
变成
require('jqtree')
我还在我的 javascript/packs 文件夹中创建了一个 sortable.js 文件,其中确实包含以下内容
require ;'jqTree/tree.jquery.js'
jQuery(window).on('load', function () {
alert("Done"); //This works!
});
$(function() {
$('#tree1').tree({
data: data,
autoOpen: true,
dragAndDrop: true
});
})
;在 require 语句中让我很困惑,但控制台错误要求它
现在看起来像这样
require("jqtree");
$(function() {
alert($('#tree1').data('items'));
});
$('#tree1').tree({
data: $('#tree1').data('items'),
autoOpen: true,
dragAndDrop: true
});
使用上面的代码我得到一个引用错误:数据未定义 在一个视图中,我有以下代码
<%=javascript_pack_tag("sortable")%>
<%= content_tag "div", id: "tree1", data: {items: @menu_items} do %>
Loading items...
<% end %>
我现在遇到的问题是我的浏览器报告错误,树不是一个函数。
在我的 application.css.scss 我有
*= require "jqtree.css"
哪个不起作用
我有一个详细的答案,花了我 quite 的时间整理,我将在未来几天用这个细节更新这个答案,但首先要正确连接所有内容jQuery、jQuery-ui 和组件本身,在本例中是 jqTree
纱线绝对是答案 从命令行开始添加相关包
yarn add jquery
yarn add jquery-ui
yarn add jqtree
一旦安装了相关的 yarn 包,我需要使 jQuery 和 jQuery-ui 可用,原因我还没有完全理解,一个简单的 require 不够
关注这个posthttps://www.botreetechnologies.com/blog/introducing-jquery-in-rails-6-using-webpacker
我将 config/webpacker
文件夹中的 environment.js 文件设置为如下所示
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
);
const aliasConfig = {
'jquery': 'jquery-ui-dist/external/jquery/jquery.js',
'jquery-ui': 'jquery-ui-dist/jquery-ui.js'
};
environment.config.set('resolve.alias', aliasConfig);
module.exports = environment
重新启动服务器后,我在 app/javascript/packs
文件夹中创建了一个名为 test.js 的简单 js 文件,据我所知这是所有 javascript 现在所在的位置,尽管仍然存在通过将 javascript 放在 assets/javascript
文件夹中来使用 sprockets 的可能性,我被告知,没有解释为什么,将 webpacker 与 sprockets 混合用于服务 [=62 不是一个好主意=].
Webpacker 确实也有提供样式表的能力,但是我仍然更喜欢我的样式表由 app/assets 文件夹中的链轮提供,并使用样式表 link 标签,就像 Rails 应用程序中的传统做法一样测试证明这种方式更有效,因此以这种方式将 sprockets 与 webpacker 混合似乎不是问题。
我只是在 test.js 文件中添加了一条简单的警报消息,只是为了检查 webpacker 和 jQuery 是否已正确连接。
所以test.js看起来像这样
require("jquery-ui");
require("jqtree");
$(function() {
alert($('#tree1').data('items'));
});
然后使用 javascript 我只是在视图中包含了一个 javascript pack 标签,我想像这样使用它。
在随机 edit.html.erb 视图中
<h1>Editing Menu Item</h1>
<%= render 'form', menu_item: @menu_item %>
<%= link_to 'Show', [:admin, @menu_item] %> |
<%= link_to 'Back', admin_menu_items_path %>
<%=javascript_pack_tag("test")%>
不需要文件名的路径或扩展名,它就可以工作!
我发现这种方法非常简洁,原因有两个
1) 通过将特定页面 javascript 包含在每个页面中,将其包含在默认情况下包含在布局中的 application.js 文件中,我并没有不必要地膨胀网页每页。
2) 我似乎不必担心 DOM 加载的事件,并且到目前为止没有 turbolinks 干扰它的问题,尽管我怀疑这可能更靠运气比 judgement 和我可能不得不在未来修改那个想法并利用 'data-turbolinks-track': 'reload'
选项,但到目前为止一切顺利,这不是必需的。
所以现在一切都已连接并开始工作,是时候让 jqTree 组件与祖先一起工作 gem 以便能够构建和组织站点的菜单项,
但到目前为止,使用 yarn top install 组件并正确连接 jQuery 是一件简单的事情。我最初没有使用纱线,这导致我遇到了各种各样的问题,导致了我原来的问题。
剩下的就是后续了...