Falcor Model如何处理对字符串的引用?

时间:2016-01-25 08:30:51

标签: javascript reference data-consistency falcor

在Javascript中,strings are immutable,并且对字符串的引用等同于复制字符串istelf。

在Falcor中,我可以使用{$type:"ref", value:[...]}来引用字符串。 Falcor声称保持数据一致性,因此如果模型包含引用,它们最终会指向同一个JS对象(因此保持一致性变得微不足道)。

  

来自Falcor docs on JSON Graph
  JSON Graph允许将图形建模为JSON而不引入重复项。不是多次将实体插入同一个消息,而是将具有唯一标识符的每个实体插入JSON Graph对象中单个,全局唯一的位置。

但是,我看不出它如何适用于字符串。

比方说,我有一个这样的模型:

{jsonGraph:{
    foo: {text: 'aaa'},
    bar: {text: {$type: "ref", value: ["foo", "text"]}},
}}

更新foo.text后会发生什么? bar.text也会更新吗?如果是的话,它是如何运作的?

1 个答案:

答案 0 :(得分:1)

  

更新foo.text后会发生什么? bar.text也会更新吗?

如果您更新foo.text,然后更新get('bar.text'),您将获得foo.text的当前值。它的好像值在两个地方都得到了更新,如果你想这样想的话。

但实际上没有bar.text值,它只是一个引用,如果引用的内容发生了变化,那么该引用后面的内容将会遇到这个新值。

这样想:

var text = '123';
function getText() {
  return text;
}

getText()的行为类似于对text的引用。如果您设置text = 456,则getText()将开始返回其他值,即使getText()本身没有更改。