问题标签 [ember-octane]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ember.js - 升级到 ember 3.15 后,产生承诺的助手将无限重新计算
我无法解决这个错误,但是当我从 3.13 升级到 3.15 时发生了一些事情。在某些(但不是全部)模板中,我在 let 块中使用助手的结果,助手将被无限重新渲染。
如果我不对数据做任何事情,那很好。一旦我尝试将数据用于任何事情,它就会爆炸。具体来说,我有关于 Promise 和并发任务的麻烦示例。它们非常融入我的框架,因此很难一次将它们分解出来。我将不得不为此努力。
我已经看到了过去由于以下错误而发生这种情况的示例:
https://github.com/emberjs/ember.js/issues/14351
我还阅读了有关修改助手参数从而导致重新渲染的助手。但我很确定我检查得很好,这不是问题。
浏览器会慢到爬行,如果我将 console.log('hi') 语句放在助手的计算函数中,我会看到数千个'hi'。所以我知道它被一遍又一遍地调用
我知道这不是一个非常完整的问题,但我现在陷入困境,这是我能找到的最好的。
在我的应用程序的辛烷化过程中是否会发生任何可能导致这种情况发生的事情?
编辑---更多信息
这是我的助手的基本版本,被一遍又一遍地调用。“field”是一个保存模型信息的 EmberObject - 在这种情况下是字段的可用值。
可用值是
逻辑是对的。如果我把它放在一个计算属性中它工作正常。
帮助器在这样的模板中使用:
如果我省略了日志,它可以正常工作,但实际上并没有被调用,所以......那又怎样:-/
我尝试将帮助程序设为函数而不是类,并且尝试将“存储”的范围更改为具有相同结果的组件。我一直在堆栈中确保@'s 和 this's 等也是正确的,以防它是名称/范围混淆的问题。如果它吞下了一个错误,那么我不知道为什么它会作为组件上的 cp 工作 - 显然这是另一种失败模式。
而这只是一个帮手。我有另一个返回任务,它正在做同样的事情。尽管我使用了几乎所有的设计模式,但我从未选择过任何 Octane 行为:尖括号语法、本机类、异步/等待等。我在 3.13 上,当我转到 3.15 时,这弹出了。就像我说的,如果我将帮助程序输出定义为组件上的 cp,那么它可以工作,所以这就是“解决方法”。我不禁觉得我偶然发现了一些奇怪的失败模式,或者我的配置被抬高了,其中一些包装器正在“辛烷值方式”和其他“旧方式”中做事。
有一次我在控制台中看到来自“存储”的不同跟踪,它说在调用 findAll 期间超出了最大堆栈级别。它确实导致我对我的机器进行了硬重置,所以我无法保存它。我应该用手机拍张照片的。有一句关于“可追踪”的说法。我不记得它说了什么。但是看着它让我想知道是否因为对“store”的引用是一个闭包,它是否试图跟踪对没有值上下文的值的更改。我对所有这些是如何工作的并不是很熟悉,但是当我认为我所做的只是一个非常简单的方法应用程序时,我觉得看到那个调用很奇怪。
ember.js - 如何使通过 {{component}} 帮助器独立呈现的组件
<Row />
我有几个具有给定模板的组件实例(我们称之为它):
我<Row />
从这样的组件调用组件<Terminal />
:
<Terminal />
组件具有属性:
这是confirm()
在<Terminal />
组件中处理的:
cmd
一些具有属性的 Ember 模型在哪里:
现在我只想更改@resultComponentName
一个实例,但是当我更改 @resultComponentName
所有组件<Row />
实例时会重新渲染。
我怎样才能防止这种行为并使每个实例独立?提前致谢!
ember.js - 如何在 Ember JS (Octane) 的“每个”助手中改变数组的值
我有一个字符串数组作为参数传递给组件,在组件内部我使用“每个”帮助器来呈现文本输入中的每个字符串。我尝试了以下方法。
我遇到了错误“未捕获(承诺)错误:断言失败:您只能将路径传递给 mut”。如果有人能让我知道这里出了什么问题,我将不胜感激。
javascript - EmberJS Octane 将焦点放在元素上
我的组件包含许多文本区域和一个用于添加另一个文本区域的按钮。当用户单击按钮时,会添加一个新的文本区域。我希望焦点移到这个新的文本区域。
我看到了这个答案,但它是针对旧版本的,我们没有将 jQuery 与 Ember 一起使用。
到目前为止我所拥有的:
五个为什么
五个为什么.hbs
文本问题.hbs
问题摘要
用户单击“添加原因”后,如何将焦点设置到新的文本区域?
webpack - 将 monaco 编辑器集成到 ember octane
我尝试将monaco 代码编辑器集成到我的 ember octane 应用程序中。目前我正在使用 ESM 导入样式并确认手册,我安装了 webpack 加载器插件并将其集成到我的 ember-cli-build.js
但是在构建我的应用程序时,我总是收到错误消息:
模块解析失败:意外令牌 (8:0) 您可能需要适当的加载程序来处理此文件类型。
和
(节点:7993)UnhandledPromiseRejectionWarning:错误:webpack 将错误返回到 ember-auto-import
谁能帮助我并告诉我如何将 monaco 正确集成到我的 ember 应用程序中?非常感谢你!
ember.js - 迁移到 Ember 辛烷后出现错误
我正在使用 Ember 3.16.3,并且在以下代码中出现此错误:
错误:断言失败:您必须将函数作为第二个参数传递给
on
修饰符
.
ember-data - 如何处理 ember-data 中已弃用的“就绪”模型生命周期挂钩?
我目前正在从 Ember 2.18 转移到 Ember 3.16。在我的模型中,如果创建了新实例,我会使用 ready 函数为关系创建默认值。
ready 函数具有访问时正确设置整个内部状态的优点this.isNew
。
尝试转向 ES6 类方法会变成这样:
但这失败了,因为this.isNew
还不能访问内部状态。
有没有办法通过将其限制在模型中来解决这个问题?我想避免创建工厂或构建器服务。任何帮助将非常感激。
ember.js - 是否可以使路线模型成为计算/跟踪的属性?
我正在尝试让路由的模型挂钩返回一些数组,该数组通过使用Emberlater
的轮询机制不断更新。路由文件如下所示:
然后在我的控制器中,我想根据路由创建一个@computed
/属性:@tracked
model
我认为这篇 SO 帖子的建议会奏效,但它没有:(
我看到了这篇文章,但这是针对 Ember 1.13 的,因此不完全是现代解决方案。
同样,这篇文章也有过时的内容。
我正在尝试做的事情可能吗?或者,我正在考虑将数据移动到控制器中,并改为创建控制器变量的计算属性。采纳所有建议!
ember.js - 如何从 Ember 路由模型钩子传递 @tracked 对象
我的问题有两个:
放置某种轮询逻辑的最佳位置在哪里 - 在路由文件中对吗?
如何将这个不断更新的值从 Route 传递给某个子组件?将某个变量标记为“
@tracked
”,然后通过model
钩子传递跟踪变量?
假设我有这样的事情:
routes/index.js
application.hbs
我想如果我像这样使用模型钩子,它将被跟踪并因此自动更新,但事实并非如此。我有这个示例Ember Twiddle可以模拟我正在尝试做的事情。我试图通过重新分配整个变量来强制重新计算,但它没有用。
这个问题比我最初的问题更深入。