安装版本
ember-cli 2.14.2
ember-data 2.14.10
Run Code Online (Sandbox Code Playgroud)
一点看法:
我有一个名为menu在计算属性中执行存储查询的服务.其中一个商店查询表现得相当奇怪.它product-segment从功能齐全的JSON API中获取模型名称下的所有记录.此模型与product通过hasManyDS对象引用的模型有nn关系:
型号/产品segment.js
export default DS.Model.extend({
products: DS.hasMany('product'),
// ...
});
Run Code Online (Sandbox Code Playgroud)
车型/ product.js
export default DS.Model.extend({
productSegments: DS.hasMany('product-segment'),
// ...
})
Run Code Online (Sandbox Code Playgroud)
问题:
现在,当我获取这些product-segment模型时,我会指示API { include: 'products' },并且API会按要求执行.响应包括product特定的15个相关模型product-segment,这是正确的.
(让我们称这个特殊的product-segment 段x,它是我下面所有调试信息的主题)
但是,在任何时候,从任何上下文访问段x上的关系集合,只会返回12个模型,因此缺少3个模型.我目睹了与其他product-segment模型类似的问题,所以我不认为这是一个特定模型的问题.
更多的观点
我最初以为我正在处理某种竞争条件,并确保我创建了一个计算属性 - test找出来,并且我倾向于{{menu.test}}在我的视图中搔痒计算出的道具.
这是里面最简单的信息 services/menu.js
export default Service.extend({
store: inject(),
activeProductSegment: null,
// As a note: this does not …Run Code Online (Sandbox Code Playgroud) 在打字稿中,有这样的语法将模块的所有导出的“包”声明为 UMD 全局命名空间。来自文档:
export function isPrime(x: number): boolean;
export as namespace mathLib;
Run Code Online (Sandbox Code Playgroud)
这声明了一个 UMD 全局变量mathLib,作为该模块中所有“真实”导出的命名空间,因此我们可以编写以下内容:
<script>
mathLib.isPrime(2);
</script>
Run Code Online (Sandbox Code Playgroud)
现在我有一个带有默认导出的入口模块,我希望默认导出是这个命名空间。但我似乎无法让它发挥作用。例如:
我的模块.d.ts
interface MyType {
bar: number;
}
declare const Foo: MyType;
export default Foo;
Run Code Online (Sandbox Code Playgroud)
我想为此创建一个模块构建,以便它可以在其他模块环境中使用:
import Foo from 'my-module'
use(Foo.bar).someHow()
Run Code Online (Sandbox Code Playgroud)
...并且还希望此默认导出的类型是我可以指定名称的 UMD 全局类型Foo- 与默认导出的名称相同,以便在非模块脚本中使用我的模块的类型:
<script>
use(Foo.bar).someHow() // exactly the same
</script>
Run Code Online (Sandbox Code Playgroud)
对于我的 UMD 捆绑包,我已经使用该设置配置了 webpack output.library.export = 'default',因此实际上创建了一个完美的捆绑包,使得如上所述的使用成为可能。但我无法弄清楚如何完成任何类型,因为如果我写:
declare const Foo: MyType;
export default Foo;
+ export as namespace Foo;
Run Code Online (Sandbox Code Playgroud)
如果我编写以下内容,我只会在 IDE …
在我的 Angular 应用程序中,我正在进行可选的 HTTP 调用来检查用户是否存在。根据这次通话的结果,我要么想再拨打一次电话,要么停止处理。如果不求助于.toPromise(),我如何等待在块中进行的调用if?
onSomeEvent() {
const contact: IContact = {
...this.userForm.value
};
let cancelProcessing = false;
if (this.isNewUser()) {
// *** This is optional
this.userService.duplicateUserSearch(contact.email, contact.userName)
.subscribe(result => {
if (result.result !== '') {
cancelProcessing = true;
}
});
}
// *** This statement is hit before the observable completes
if (cancelProcessing) {
return;
}
// *** which means that this runs when it shouldn't
this.userService.updateContact(contact)
.subscribe(res => {
this.activeModal.close(res);
});
}
Run Code Online (Sandbox Code Playgroud)