鉴于我有一个示例模型:
var model = new falcor.Model({
cache: {
userById: {
"1": {
name: "User",
email: "user@email.com"
}
},
users: {
current: null
}
}
});
这是我用于测试目的的本地模型,我想通过调用users.login
来实现它,以便用户可以调用:
model.call(['users', 'login'], ['user', 'password'])
我意识到如果我这样做:
var model = new falcor.Model({
cache: {
userById: {
"1": {
name: "User",
email: "user@email.com"
}
},
users: {
current: null,
login: function(user, password) {
console.log('this code is reached', user, password);
// what to return in order to mutate model?
}
},
}
});
当我进行呼叫时,它会到达那里,但我无法弄清楚如何将模型变异作为响应的一部分;在服务器端,我们返回带有值和无效的路径,它只是起作用,但在这里我尝试了:
// trying returning as a jsonGraph response, don't work
login: function() {
return {
jsonGraph: {
users: {
current: {$type: "ref", value: ['userById', '1']}
}
},
paths: [['users', 'current']]
}
}
// trying returning as a path set mutation list, don't work
login: function() {
return [{path: ['users', 'current'], value: {$type: "ref", value: ['userById', '1']}}]
}
// trying force call to set on the model, don't work
login: function() {
this.set([
{path: ['users', 'current'], value: {$type: "ref", value: ['userById', '1']}}
])
}
// trying using ModelResponse, got an example on some external sources, don't work
login: funtion() {
return new ModelResponse((observer) => {
observer.onNext({
jsonGraph: {
users: {
current: {$type: "ref", value: ['userById', '1']}
}
},
paths: [['users', 'current']]
});
observer.onCompleted();
});
}
现在我不知道还有什么可以尝试的;我需要一种简单的方法来在调用本地模型后声明突变,如果你知道如何解决这个问题,请在这里告诉我。
感谢。
答案 0 :(得分:0)
客户端模型缓存仅支持JSONGraph,其中b / c它本质上只是带有一些约定的JSON,不支持函数。因此,在使用falcor模型缓存而不使用dataSource /中间层路由器时,无法实现调用。
在原型设计/测试时,这可能有点烦人,因为路由器在概念上比简单的JSON缓存对象更难。我刚才遇到过这个问题,所以我写了一个dataSource模块来支持它:falcor-local-datasource。 dataSource使用 支持函数节点的图形对象进行初始化,并且与上面的示例一样,将根据函数返回的JSONGraphEnvelope或{{3}的数组来改变图形。 }。