2014-05-19 46 views
0

考慮:如何檢查具有相同關係的模型?

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') 
}); 

這是繞了一個相當令人費解的方式。

回答

0

如果我有你的想法正確:

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') 

這仍然是一個有點貴,但應該做的工作。

相關問題