当更改嵌套值时,记录上的订阅不会触发
A subscription on a record doesn't fire when a nested value is changed
当我更改订阅记录上的嵌套值时,订阅不会被触发。
var recInfo = {};
recInfo.members = [];
recInfo.members.push({id: 1});
recInfo.members.push({id: 2});
recInfo.members.push({id: 3});
的例子:
var record = client.record.getRecord('user/johan');
console.log(record.get());
Output:
{
name: 'Johan',
members: [
{id: 1},
{id: 2}
]
}
record.subscribe((data) => {
log.debug(LOG_TAG + `Team '${model.name}' has changes. Changes:`, data);
});
现在如果我更新一个用户的值,例如:
record.set('members[1]', {id: 2, admin: true});
我希望记录更改具有相同id的成员id 2,但添加了admin-value,然后触发subscribe()应该注意到的change-event。
更改部分发生了,但它没有触发更改事件,因此订阅永远不会被触发。
我做错了什么吗?如果我添加一个用户,订阅就可以工作。
编辑:因此,我找到了一种方法来对订阅进行更改,即克隆成员,进行更改,然后用新值替换整个成员。但是,文档(http://deepstream.io/docs/record.html#set(path, value)(对不起,断开了链接)表明,我可以执行record.set( 'personalData.firstname', 'Marge' );
,这只会更新personalData中的名字。
我知道我正在尝试改变数组的值,这不会工作吗?
我只能使用set()
来改变对象的值吗?
这是我现在使用的变通方法:
var members = lodash.clone(record.get('members'), true);
members[0].admin = true;
record.set('members', members);
我认为问题是由于使用了不同类型的路径表示法。
record.set('members[1]', {id: 2, admin: true});
应该与:
配合使用record.set('members.1', {id: 2, admin: true});
原因是deepstream使用的json路径在试图访问存在的东西时,不会区分普通的js对象和数组。
相关文章:
- 用嵌套函数和默认函数定义函数
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 可以简化嵌套的延迟Q Promises解析吗
- 用于搜索的聚合物嵌套绑定
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- d3中堆栈函数和嵌套函数之间的差异
- 如何打印嵌套对象的所有值
- JavaScript 中的嵌套函数和 “this” 关键字
- 设置嵌套对象属性的更好方法
- querySelector/getElementByClassName嵌套项的顺序
- 猫鼬在特定记录中查找嵌套记录
- 访问嵌套JSON对象的键,其中键是动态的
- D3嵌套组作为x轴
- 不可变的js修改所有嵌套的记录
- 如何将新项推送到不可变JS中的深度嵌套记录中
- 使用嵌套条件记录字符串
- Ember中嵌套2层的嵌入记录
- 当更改嵌套值时,记录上的订阅不会触发
- 访问嵌套MySQL查询中的父记录
- Sails.js+Mongodb使用ORM插入嵌套的json记录