鉴于:
App.Chart = DS.Model.extend({
tags: DS.hasMany('tag'),
sameTag: function() {
var id = this.get('id');
var tags = this.get('tags');
return this.store.filter('chart', function(q) {
return Ember.isEqual(q.get('tags'), tags);
});
}.property('tags')
});
App.Tag = DS.Model.extend();
失败,因为即使两个模型具有相同的标签并且它们都加载了标签Ember.isEqual(q.get('tags'), tags)
,在OrderedSets上也是false
如此。取而代之的是,我必须进行一个计算后的属性,该属性可以使我使用Ember.isEqual
:
App.Chart = DS.Model.extend({
tags: DS.hasMany('tag'),
sameTag: function() {
var id = this.get('id');
var tags = this.get('_tagsKey');
return this.store.filter('chart', function(q) {
return Ember.isEqual(q.get('_tagsKey'), tags);
});
}.property(),
_tagsKey: function(){
var tags = [];
this.get('tags').forEach(function(tag){
tags.push(tag.id);
});
return tags.join(",");
}.property('tags')
});
这是一个非常复杂的解决方法。
如果我的想法正确,请执行以下操作:
sameTag: function() {
var tags = this.get('tags')
, ids = tags.mapBy('id').join('');
return this.store.filter('chart', function(q) {
return q.get('tags').mapBy('id').join('') === ids;
});
}.property('tags')
这仍然有点贵,但应该可以完成工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句