gpt4 book ai didi

sorting - EmberJS computed.sort - 按关联的模型属性排序

转载 作者:行者123 更新时间:2023-12-02 05:59:13 24 4
gpt4 key购买 nike

我有一个简单的belongsTo型号关系:

契约(Contract).js:

export default DS.Model.extend({
object : DS.belongsTo('object'),
....
})

对象.js:
export default DS.Model.extend({
street : DS.attr('string'),
zip : DS.attr('string'),
city : DS.attr('string'),
...
})

在我的 Controller 中,用于拥有许多 contracts 的实体, 我想按关联的街道名称排序 object ,但不知何故这
export default Ember.Controller.extend({

sortOrder: ['object.street'],
sortedObjects: Ember.computed.sort('model.contracts', 'sortOrder')

...
});

不起作用。

使用自定义比较器功能
function(a, b){
if (a.street > b.street) {
return 1;
} else if (a.street < b.street) {
return -1;
}
}

我发现 abPromises ,但不知何故我看不到如何通过嵌套属性(对象的街道)对它们进行排序

编辑

为了进一步澄清代码:
contracts : Ember.computed.alias('model.contracts'),
street: Ember.computed.alias('realty.street'),

sortOrder: ['realty.street'],
sortedOwnedRealties: Ember.computed.sort('contracts.@each.street', function (a, b) {
console.log(Ember.get(a, 'id'));
console.log(Ember.get(a, 'street'));

//return 1;
})

该函数打印 undefinedstreet 的控制台, 但正确的 id .

我已重命名 objectrealty为了清楚起见。

最佳答案

他们可能是PromiseObject s,两者都是,Ember.ObjectPromise .您做的一些事情可能不是一个好主意:

object是保留关键字。拥有一个名为 object 的模型或关系不是一个好主意。 ,即使它可能有效。

其次,您的计算属性具有错误的依赖键。实际上你会想要像 'modelcontracts.@each.object.street' 这样的东西。而不是 'modelcontracts' ,但是这不起作用,因为 '@each.a.b'不支持。解决方案是在合约上为街道创建别名:

street: Ember.computed.alias('object.street'),

然后你可以使用它作为你的依赖键: modelcontracts.@each.street .

接下来在您的自定义比较器函数中访问 a.street通过点符号。这对 ember 对象不起作用并且不可靠。始终使用 .get()访问属性:
import Ember form 'ember';
const {get} = Ember;


function(a, b){
if(get(a, 'street') > get(b, 'street')) {...}
}

但是还要注意,如果没有 computed.alias我在上面提到它不是 get(a, 'street')但是 get(a, 'object.street') .

您的代码无法正常工作的问题可能是 object是异步加载的,因此在评估您的 CP 时,街道尚未加载。添加正确的依赖项可能会解决此问题。

关于sorting - EmberJS computed.sort - 按关联的模型属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39872225/

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