emberjs设置了深层嵌套的未定义键

时间:2016-10-02 15:54:54

标签: ember.js

我有一个带有属性响应的模型,包含一个带有各种键和嵌套级别的json

我可以将输入字段绑定到一个缺失键,但不能更多

例如,如果加载模型后

model.response = { key1: { c1: 12} }

自然,我可以做到

{{ input value = model.reponse.key1.c1}}

并在输入字段中查看12

但是,我可以做到

{{ input value = model.reponse.key1.miss1}}

将在保存模型时记录,并在页面重新加载

中找到

但我做不到

{{ input value = model.reponse.misskey1.miss2}}

有两个级别的缺失。

不仅保存了值,还保存了具有依赖键的计算属性 模型上的'reponse.misskey1.miss2'永远不会在输入更改时触发

我是否需要设置所有缺失的密钥,还是有其他方法可以使其工作?

在这种情况下,我应该使用unknwonProperty处理程序吗?

由于

2 个答案:

答案 0 :(得分:1)

我们在其中一个项目中使用了setUnknownProperty(或unknownProperty)。我们没有使它递归,它只提供一个级别的未知属性。 (这对我们来说已经足够了。)因此,开发人员可以快速生成crud屏幕:

{{our-input-component "item.x" label=(t "intl.item.x")}}
{{our-input-component "item.y" label=(t "intl.item.y")}}

我们试过了这个问题,大约八个月它一直没有任何问题。

但是,这是双向绑定。您应该避免使用双向绑定。这会导致您的应用违反 Data Down Action Up 原则。

Ember输入帮助程序的常见用法与您的相同。 (value = model.reponse.misskey1.miss2)您应该使用单向绑定进行值赋值,并且应该处理更改/输入事件以在这些事件/操作处理程序中进行属性赋值。或者使用其他组件系列,例如ember-one-way-controls

答案 1 :(得分:0)

我在模型的ready()回调中使用了它 它的工作原理

 if (this.get('response.misskey1') === undefined){
         this.set('response.misskey1', {})
      }