Мне нужен объясненный метод вызова Falcor; или хороший пример?

Есть ли хорошее подробное объяснение или пример использования в любом месте Falcor? call метод?

Я изо всех сил пытаюсь понять Фалькора call метод. Я понимаю первые аргументы (functionPath а также args), но я не знаю, что такое два последних аргумента и как они используются (refSuffixes а также thisPaths). Я не понимаю их описания. Из справки Фалькора по API:

/**
 * Invokes a function in the DataSource's JSONGraph object.
 * @name call
 * @function
 * @arg {Path} functionPath the path to the function to invoke
 * @arg {Array.<Object>} args the arguments to pass to the function
 * @arg {Array.<PathSet>} refSuffixes paths to retrieve from the targets of JSONGraph References in the function's response.
 * @arg {Array.<PathSet>} thisPaths paths to retrieve from function's this object after successful function execution
 * @returns {Observable.<JSONGraphEnvelope>} jsonGraphEnvelope the response returned from the server.
 * @memberof DataSource.prototype
 */

Мне также не удалось найти хороший пример использования. Лучшее, что я нашел, это из этого комментария к проблеме ошибки (фрагмент ниже), но отсутствуют некоторые определения переменных, например. titleRef:

var dataSource = new Router([
 {
        route: 'list.push',
        call: function(callPath, args) {

            // retrieving the title id from the reference path:            
            titleId = titleRef.value[1];
            if (parseInt(titleId, 10).toString() !== titleId.toString())
                throw new Error("invalid input");

            return myListService.
                addTitle(titleId).
                then(function(length) {
                    return [
                        {
                            path: ['myList', length - 1],
                            value: titleRef
                        },
                        {
                            path: ['myList', 'length'],
                            value: length
                        }
                    ];
                });
        }
    }
]);

В другом примере клиента и сервера показан один из способов использования метода вызова: возвращение объекта с { paths: [...], jsonGraph: {...} } - В чем разница между возвращением pathValues или этого объекта с paths а также jsonGraph ?

Мне кажется, что-то не хватает в моих локальных реализациях, и я думаю, что это потому, что я не понимаю последние два аргумента к ошибкам call метод.

1 ответ

Решение

Я думаю, что понял thisPaths Однако я с тобой, я не совсем понимаю refPaths еще. Вот мое понимание thisPaths,

Если путь вызова list.push тогда мы можем думать о push как метод и list как объект. Другими словами, когда list.push() называется, образно говоря, this === list внутри push() функция. Это требует некоторого воображения, поскольку это не совсем так с точки зрения семантики времени выполнения JS. Скорее, Falcor поддерживает свободную аналогию с JavaScript, если это имеет смысл.

Итак, в коде на стороне клиента, если вы передаете thisPaths как это:

model.call(
  ['list','push'], // call path
  [...], // args
  [...], // refPaths
  [['length'],[0, 'foo']] // thisPaths
)

... это объединит this возражать с теми thisPaths и результирующие пути будут автоматически обновляться в кеше модели при получении ответа:

[['list', 'length'], ['list', 0, 'foo']]

Это хорошо, поскольку он дает клиенту некоторый контроль над тем, что обновляется в результате операции вызова, не прибегая к ручному аннулированию и повторному извлечению кэша, а также без того, чтобы разработчик обработчика маршрута вызова заранее предугадывал, чего хотят клиенты.

В частности, все это происходит без реализации call функция обработчика, необходимая для чего-либо. (Это то, что поначалу заставило меня замолчать.) Это просто удобство, которое доступно вам на стороне клиента и автоматически встроено в Falcor.

Другие вопросы по тегам