gpt4 book ai didi

javascript - 计算模型属性中的 Ember 错误

转载 作者:行者123 更新时间:2023-11-28 08:01:26 26 4
gpt4 key购买 nike

我有以下用户 Ember 模型,其中包含权限列表:

App.User = DS.Model.extend({
username: DS.attr(),
permissions: DS.attr(), //e.g. ['edit', 'read']

isEditor: function() {
var perms = this.get('permissions');
return perms.indexOf('edit') > -1;
}.property('permissions')
});

除其他外,我使用它来获取 Controller 中的编辑器列表(用于select)。当我加载页面时,我在控制台中收到此错误:

Error: Something you did caused a view to re-render after it rendered but before it was inserted into the DOM.

它发生在添加 isEditor 函数之后,如果我注释掉该函数的内容,它就可以正常工作,尽管显然我从中生成的列表是不正确的。但据我所知,代码没有任何问题。

编辑:我正在 Controller mixin 中使用该函数:

App.EditorsMixin = Ember.Mixin.create({
editors: function() {
return this.store.filter('user', function(model) {
return model.get('isEditor');
});
}.property()
});

编辑2:看来问题可能与以下事实有关:当编辑器时,并非所有store.find('user') promise 都得到履行 被调用。添加一些 console.log 行并通过调试器运行它,我可以看到我需要这样的东西:

    editors: function() {
this.store.find('user').then(function() {
return this.store.filter('user', function(model) {
return model.get('isEditor');
});
});
}.property()

但我不知道如何从困惑的嵌套 promise 中获取编辑器列表。

最佳答案

我找到了答案,但我完全走错了路。原因很简单,每次更改记录时都会运行 filter 函数,其中一些时间是在填充所有字段之前。一旦爆炸发生,剩下的事情就会随之而来。所以解决方案就是在使用之前检查 perms 是否已定义:

App.User = DS.Model.extend({
username: DS.attr(),
permissions: DS.attr(), //e.g. ['edit', 'read']

isEditor: function() {
var perms = this.get('permissions');
if (perms)
return perms.indexOf('edit') > -1;
else
return false;
}.property('permissions')
});

来自 ember 的有些神秘的错误没有帮助,但是一旦我开始关注 TypeError 就变得更加清晰。

关于javascript - 计算模型属性中的 Ember 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com