- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我的情况如下:我得到了一个包含几个输入字段的组件,这些字段代表一个联系人并填充了来自服务的数据:
@service('contact-data') contact;
每个字段代表一个可以通过以下方式访问的属性
{{contact.properties.foo}}
我将属性保存为 JS 对象,以便在使用它们时轻松过滤掉空字段,我使用 @tracked
跟踪它,如下所示:
export default class MyService extends Service {
@tracked properties = {id: 0, foo: "", bar : "abc", };
@action updateProperty(name, value) {
this.properties[name] = value;
}
}
但是,属性不会在组件中正确重新呈现,并且文本字段不会得到更新。
如果有任何帮助,我将不胜感激!谢谢!
最佳答案
任何时候你有一堆嵌套状态需要跟踪,只跟踪顶级对象不会导致该对象内部的更新传播出去。您需要跟踪内部属性,或您需要重置您正在跟踪的整个对象。
您基本上有两个粗略的选择来处理这些内部属性的更新:
@tracked
的实用程序类中,并在创建服务时实例化实用程序类。然后这些字段的更新也会更新。this.properties = { ...this.properties, foo: newValue };
其中,(1) 几乎总是最便宜且性能最好的。执行 (2.1) 会稍微贵一点,因为它需要使用 Proxy
,但还不够您通常会注意到的程度。执行 (2.2) 最终会触发应用中任何地方使用的 properties
中的 every 属性的重新渲染,即使它没有改变。
在您描述的情况下,这些字段似乎是众所周知的,这意味着您应该使用该类。解决方案可能如下所示:
import Service from '@ember/service';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';
class TheProperties {
@tracked id;
@tracked foo;
@tracked bar;
}
export default class MyService extends Service {
properties = new TheProperties();
@action updateProperty(name, value) {
this.properties[name] = value;
}
}
注意 @tracked
installs getters and setters in place of plain class properties ,因此如果您需要在某处或类似的地方将其用于 JSON 有效负载,您还需要在实用程序类上实现 toJSON
:
class TheProperties {
@tracked id;
@tracked foo;
@tracked bar;
toJSON() {
let { id, foo, bar } = this;
return { id, foo, bar };
}
}
关于ember.js - 如何在 Ember Octane 中更新嵌套状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64267670/
我有一个运行 Ember@3.20 的项目。我们目前正处于从经典组件迁移到基于微光的组件的过程中,并且遇到了一些可以从缓存中受益的昂贵计算模式。 我的问题是,将功能缓存到 glimmer 组件的 ge
从 Ember 升级 =3.15 .如何将表单值从 Controller 传递到组件? 我无法开始解释尝试的诊断组合的数量以及收到的相应错误。所以,我想最好问问应该如何正确完成?微光参与了吗? 一个简
我有一个带有侧边栏组件的应用程序模板。此侧边栏组件通过应用程序路由模型显示在列表中。应用程序路由检查用户是否经过身份验证,如果没有,则跳过模型加载。索引路由不是 protected 路由,所以它在未登
这个问题与Ember Octane How to Get Error Messages to be Displayed?有关 问题:清除表单错误的正确方法是什么,我该怎么做?我希望每次用户访问表单时都
我想编写一个 Octane/Glimmer 样式的组件,其中传入的操作是可选的。写这个的最好方法是什么? 例如,我希望组件的这两种用途都有效: 现在,我的组件类有很多这样的代码,在调用它之前检查是
在过去的几周里,我一直在玩 ember Octane,我认为它很棒。我已经尝试了一些 ember 插件来测试当前哪些插件可以使用 ember octane,其中一些插件需要 jQuery 才能工作。所
我想要从 HPE ALM Octane 服务器连接到 MSSQL 服务器。现在我遇到了问题,我无法连接到它,因为我的连接字符串无效。你能看出问题所在吗? 连接字符串: jdbc:mercury:sql
我正在升级到 Ember Octane,并且我了解到 mixin 已被弃用。我将继续使用它们,直到我弄清楚如何更换它们。与此同时,我想将我的路由切换为使用新的类语法,而不是 Route.extend。
此问题涉及:Does Ember Octane Route class support using mixins? Mixin 在 Ember Octane 中已被正式弃用。 问题: 替换 Ember
所以我的情况如下:我得到了一个包含几个输入字段的组件,这些字段代表一个联系人并填充了来自服务的数据: @service('contact-data') contact; 每个字段代表一个可以通过以
我正在试用 Octane,出于某种原因,如果我在模板中显示一个数组并向其中添加一个新对象,则 UI 不会更新。我究竟做错了什么? 这是我的模板: Field Name Add field {{#ea
我正在使用 Ember Octane 版本,我想在 Route 中调用一个操作从子组件。伪代码如下。 **Route** export default class SomeRouter extends
我想编写一个测试,当我提交一个字符串时,@tracked array =[0,0,0] 字段将会改变。我有一个简单的 对于 hbs。 如果输入是 1然后跟踪数组变为 [0,1,0] .我该怎么做呢??
我正在 Ember v3.13 中编写一些 Octane 风格的组件,连同 {{did-insert}} ember-render-modifier .但是,当调用绑定(bind)到 did-inse
我正在尝试在 routes/web.php 文件中将 Octane 路由与 Laravel 一起使用。 use Laravel\Octane\Facades\Octane; use Symfony\C
我想使用 Ember.js Octane 在打开和关闭类显示之间切换。我该怎么做呢?我需要@action 还是@tracked? or 最佳答案 这在 Ember 中应该是直截了当的(尤其是使用
我正在尝试将“操作”从 Controller 传递到当前模板的孙组件。但由于某种原因它失败了。谁能告诉我我在这里缺少什么。 MainTemplate's Router Controller expor
最近遇到一个@cached的用例来自 tracked-toolbox编写带有自动跟踪功能的 Glimmer 组件时。这是一个示例代码片段: import Component from '@glimme
我尝试整合monaco code编辑器进入我的 ember 辛烷值应用程序。目前我正在使用 ESM 导入样式并确认手册,我安装了 webpack 加载器插件并将其集成到我的 ember-cli-bui
因此,在 Ember Octane 中,有两种方法可以将函数附加到 hbs 文件中的事件。 EmberJS 方式:{{on 'click' this.function}} 经典的HTML方式:oncl
我是一名优秀的程序员,十分优秀!