2016-01-25 3 views
0

В Javascript, strings are immutable, а ссылки на строки эквивалентны копированию строки istelf.Как модель Falcor обрабатывает ссылки на строки?

В Falcor я могу ссылаться на строки, используя {$type:"ref", value:[...]}. Falcor утверждает, что поддерживает согласованность данных, поэтому, если модель содержит ссылки, они в конечном итоге указывают на один и тот же объект JS (поэтому сохранение согласованности становится тривиальным).

От Falcor docs on JSON Graph:
JSON График позволяет график, чтобы быть смоделирован как JSON без введения дубликатов. Вместо того, чтобы вставлять объект в одно и то же сообщение несколько раз, каждый объект с уникальным идентификатором вставляется в одно, глобально уникальное местоположение в объекте Graph JSON.

Однако я не вижу, как это применимо к строкам.

Пусть говорят, у меня есть модель, как это:

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

Что происходит, когда я обновляю foo.text? Будет ли обновляться bar.text? И если да, то как это работает?

ответ

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() сам не изменился.