2015-02-13 3 views
0

Попытка хранить indexReferences для каждого пользователя, я обнаружил, что когда я храню один (или несколько) непосредственно на карте, он отлично работает. Однако при хранении в объекте (или пользовательском объекте реального времени) API реального времени генерирует ошибки Circular JSON.Ошибка JSON Google в реальном времени, когда indexReference хранится на совместной карте только в том случае, если содержится в объекте

Это прекрасно работает:

function doRegisterTypes() { 
    gapi.drive.realtime.custom.registerType(MyCustomType, "MyCustomType"); 
    MyCustomType.prototype.startPoints = gapi.drive.realtime.custom.collaborativeField('startPoints'); 
    MyCustomType.prototype.endPoints = gapi.drive.realtime.custom.collaborativeField('endPoints'); 
    MyCustomType.prototype.elements = gapi.drive.realtime.custom.collaborativeField('elements'); 

    gapi.drive.realtime.custom.setInitializer(MyCustomType, initializeMyCustomType); 
} 

function initializeMyCustomType() { 
    var model = gapi.drive.realtime.custom.getModel(this); 
    this.startPoints = model.createMap(); 
    this.endPoints = model.createMap(); 
    this.elements = model.createList(); 
} 

function initializeModel(model) { 
    var o = model.create("MyCustomType"); 
    o.elements.pushAll(["foo", "bar"]); 
    var startIndex = o.elements.registerReference(0, false); 
    var endIndex = o.elements.registerReference(0, false); 
    o.startPoints.set(UserId, startIndex); 
    o.endPoints.set(UserId, endIndex); 

    model.getRoot().set("MyCustomObject", o); 
} 

Но это не, в противном случае с круговыми ошибки JSON при сохранении объекта диапазона в карте:

function doRegisterTypes() { 
    gapi.drive.realtime.custom.registerType(MyCustomType, "MyCustomType"); 
    MyCustomType.prototype.ranges = gapi.drive.realtime.custom.collaborativeField('ranges'); 
    MyCustomType.prototype.elements = gapi.drive.realtime.custom.collaborativeField('elements'); 

    gapi.drive.realtime.custom.setInitializer(MyCustomType, initializeMyCustomType); 
} 

function initializeMyCustomType() { 
    var model = gapi.drive.realtime.custom.getModel(this); 
    this.ranges = model.createMap(); 
    this.elements = model.createList(); 
} 

function initializeModel(model) { 
    var o = model.create("MyCustomType"); 
    o.elements.pushAll(["foo", "bar"]); 
    var startIndex = o.elements.registerReference(0, false); 
    var endIndex = o.elements.registerReference(0, false); 

    // FAILS: 
    o.ranges.set(UserId, {start:startIndex, end:endIndex}); 

    model.getRoot().set("MyCustomObject", o); 
} 

Я должен подчеркнуть, появляется ошибка для single indexReference, и является ли объект конкретным нестандартным типом или нет, а также WHENEVER значение установлено на карту: при инициализации модели или позже. Как будто indexReferences нельзя хранить ни на чем, кроме «верхнего уровня», хотя это мало смысла.

Характеристика: Ошибка? Пользовательская скупость?

+0

Можете ли вы разместить точное сообщение об ошибке? что такое o.ranges? –

+0

@Cheryl Simon Я дам вам сообщение об ошибке, но o.ranges - это карта, указанная в процедуре initializeMyCustomType второго примера. – HeyHeyJC

+0

@CherylSimon Вот эта ошибка: Ошибка в функции прослушивателя: TypeError: преобразование круговой структуры в JSON TypeError: преобразование круговой структуры в JSON в Object.stringify (native) ... плюс еще куча. – HeyHeyJC

ответ

1

Вы не можете хранить CollaborativeObjects в произвольном json внутри CollaborativeObject. CollaborativeObjects (включая IndexReferences) должны храниться непосредственно в других CollaborativeObjects.

(Есть несколько причин для этого, в основном, приходится делать с тем, как сотрудничество работает .. объекты JSON рассматриваются как произвольное сгустков, содержание которого игнорируется.)

В этом случае, вы можете создать диапазон тип пользовательского объекта, который имеет начало и конец CollaborativeField. (Или CollaborativeList с 2 элементами ..)

+0

Как я уже сказал в исходном вопросе, это происходит даже тогда, когда я создаю пользовательский объект, в этом случае объект Range с началом и концом ... – HeyHeyJC

+0

О, извините, я пропустил это ... это, наверное, ошибка. У вас есть ссылка на страницу с ревью? Мы рассмотрим это. Между тем, 2-элементный CollabList должен работать: -/ –

+1

Хорошо, я исправил его ... вы были правы, но есть немного больше: в процедуре инициализации для настраиваемого типа Range я устанавливал начало и конец null (не работает) или {} (не работает). Возможно, моя глупость, но нет необходимости устанавливать их на что-то в этот момент или даже инициализировать тип вообще. – HeyHeyJC

 Смежные вопросы

  • Нет связанных вопросов^_^