【发布时间】:2015-08-16 06:20:58
【问题描述】:
我有一个带有 Angular 前端的 Loopback API,并且在尝试调用非静态远程方法时看到了一些奇怪的行为。
我把它归结为这个例子。拨打这样的电话时:
$scope.myInstance = MyModel.findOne({}, function success(value){
$scope.greeting = value.$prototype$hello({}, function success(){});
});
我发现 $scope.myInstance 最终包含对 $prototype$hello 的调用结果,而 $scope.greeting 为空。 MyModel 是通过这样的远程调用定义的:
module.exports = function(MyModel) {
MyModel.prototype.hello = function(cb) {
cb(null,"Hello: " + this.name);
}
MyModel.remoteMethod(
'hello',
{
isStatic: false,
http: { verb: 'get' },
returns: {arg: 'message', type: 'string'}
}
);
};
如果我的模板中有这个:
Greeting = {{ greeting }}, Instance = {{ myInstance }}
我明白了:
问候 = {},实例 = {"message":"Hello: Test","$promise":{},"$resolved":true}
用问候结果清楚地代替模型实例。我希望在 Instance 变量中看到模型实例:
问候 = {},实例 = 实例 = {"name":"Test","id":1,"$promise":{},"$resolved":true}
加载过程中模型短暂闪烁。
我可以通过检索模型的其他一次性实例来解决此问题,但我希望有人知道为什么会发生这种情况以及是否有更清洁的解决方案。
2015 年 8 月 12 日更新:我创建了一个 Plunker 来演示此问题 here,但这仅包含客户端 JS。对于完整的环回项目,我已将代码添加到 GitHub repo
有趣的是,在 Safari 下的行为略有不同,根本不渲染实例:
问候 = {},实例 =
最初描述的行为是在 Chrome 下看到的。
【问题讨论】:
-
创建一个 plunker 或 fiddle 以便我们真正提供帮助。
-
感谢您的建议,请参阅我的更新。请注意,这是一个 Loopback (Node.js) 项目,因此 Plunker 只会显示客户端部分。
标签: angularjs loopbackjs