gpt4 book ai didi

javascript - Ember 在服务的数组对象中设置值

转载 作者:行者123 更新时间:2023-12-02 14:47:00 24 4
gpt4 key购买 nike

我正在尝试设置一个对象的属性“show”,该对象来自由服务提供的数组。

服务(不是问题):

// services/events.js
export default Ember.Service.extend({
types: [
{"code": 0, "label": 'Performance', "show": true, "css": 'warning'},
{"code": 1, "label": 'Preview', "show": true, "css": 'danger'},
....
],
});

在我的 Controller 中,我有一个应该更新属性“show”的操作:

// controller
const { service } = Ember.inject;

export default Ember.Controller.extend({
eventsService: service('events'),
....
actions: {
setEventFilter: function(code) {
....
let obj = this.get('eventsService.types').objectAt(code);
// I get a proper Object here, that also has a set-function:
console.log(obj);
// this fails with 'Uncaught TypeError: obj.set is not a function':
obj.set('show', false);
}
}
});

我已阅读此处的答案 Ember: set array value for specific key ,尝试了所有的可能性,但在我的情况下没有任何效果。

我不明白的是,我可以在控制台中看到函数“set”,但我仍然收到该错误:

enter image description here

有什么建议吗?有人知道我做错了什么吗?

我也尝试过:

console.log(obj.show);   // working! gives me right value
console.log(obj.get('show'); // same error (but with get of course...)
obj.show = false; // gives error 'Assertion Failed: You must use Ember.set() to set the `show` property (of [object Object]) to `false`.'

最佳答案

数组内的对象:

{"code": 0, "label": 'Performance', "show": true, "css": 'warning'},

不是 Ember 对象,因此当然没有在其上定义 set 方法。您只需说

即可设置其属性之一
obj.show = false;

当然,这不允许您从该对象挂起计算属性或观察者(或动态更新模板中对其属性的引用),因为作为 POJO,它也没有任何可用的机制。如果你想将其视为 Ember 对象,那么它必须是 Ember 对象,例如

types: [
Ember.Object.create({"code": 0, "label": 'Performance', "show": true, "css": 'warning'}),
Ember.Object.create({"code": 1, "label": 'Preview', "show": true, "css": 'danger'}),
....
],

这将使子对象成为 Ember 对象,但 types 仍然是一个普通的旧 JS 对象,因此您仍然无法执行类似的操作

typeCss: Ember.computed.map('types', 'css')

所以如果你想让这种东西起作用,你就必须让数组本身成为一个 Ember 对象。

Ember.set(obj, prop, val) 起作用的原因是 Ember.set 甚至知道如何在 POJO 上工作。请注意,在某些情况下,一些类似 Ember 的东西在 POJO 上工作,但我不会依赖它们。

顺便说一句,此行为与来自服务的对象无关。

关于javascript - Ember 在服务的数组对象中设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36524436/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com