Falcor call
方法的任何地方都有详细的详细说明或用法示例吗?
我很难理解Falcor的call
方法。我理解第一个参数(functionPath
和args
),但我对最后两个参数是什么以及如何使用它们感到无能为力(refSuffixes
和{{1} })。我不理解他们的描述。来自Falcor's API reference:
thisPaths
我也无法找到一个好的用法示例。我发现的最好的是this falcor issue comment(下面的代码段),但是有一些变量定义缺失 - 例如。 /**
* 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
在另一个client和server示例中,它显示了一种使用调用方法的方法:返回一个带有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
}
];
});
}
}
]);
的对象 - 返回{{3}之间的区别这个对象包含{ paths: [...], jsonGraph: {...} }
和paths
?
我似乎在我的本地实现中遗漏了一些内容并且我正在思考它,因为我不理解falcor jsonGraph
方法的最后两个参数。
答案 0 :(得分:2)
我想我理解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中。