简体   繁体   English

Ember js服务和过滤器

[英]Ember js service and filterBy

i have a service to manage all the errors and alerts in my app. 我有一项服务来管理我的应用程序中的所有错误和警报。 and the code looks like this 代码看起来像这样

Service 服务

import Ember from 'ember';

export default Ember.Service.extend({
messages: null,

init() {
    this._super(...arguments);
    this.set('messages', []);
},

add: function (severity, msg, messageType) {
    if (severity === 'error') {severity = 'danger';}

    var msgObject ={
        severity: severity,
        messageType: messageType,
        msg: msg,
        msgId: new Date()
    };      
    this.get('messages').pushObject(msgObject);
},

remove(msgId) {     
    this.get('messages').removeObject(msgId);
},

empty() {
    this.get('messages').clear();
}
});

Component 零件

import Ember from 'ember';

export default Ember.Component.extend({
messageType:'global',
messageHandler: Ember.inject.service(),

messages: function(){
    return this.get('messageHandler.messages').filterBy('messageType',this.get('messageType'));
}.property('messageHandler.messages'),

actions : {
    dismissAllAlerts: function(){
        this.get('messageHandler').empty();
    },
    dismissAlert: function(msgId){
        this.get('messageHandler').remove(msgId);
    }
}    
}); 

Initializer 初始化

export function initialize(container, application) {
application.inject('component', 'messageHandler', 'service:message-handler');
}

export default {
name: 'message-handler',
initialize : initialize
};

Template 模板

import Ember from 'ember';

export default Ember.Component.extend({
messageType:'global',
messageHandler: Ember.inject.service(),

messages: function(){
    return this.get('messageHandler.messages');
}.property('messageHandler.messages'),

actions : {
    dismissAllAlerts: function(){
        this.get('messageHandler').empty();
    },
    dismissAlert: function(msgId){
        this.get('messageHandler').remove(msgId);
    }
}    
}); 

and whenever there is an error i will add it like this 只要有错误,我会像这样添加它

this.get('messageHandler').add('error',"Unable to get ossoi details","global");

my problem is the filterBy in the component is not working. 我的问题是组件中的filterBy无法正常工作。 if i remove the filterBy() it works and i can see the error in the template. 如果我删除filterBy()它工作,我可以看到模板中的错误。 am kinda new to ember so if anyone can help me figure out what am missing here or if there is a better way of doing this please let me know 我有点新鲜,所以如果有人能帮我弄清楚这里缺少什么,或者有更好的方法,请告诉我

filterBy usage is good and it should be working well. filterBy用法很好,它应该运行良好。 but messages computed property will not be recomputed whenever you add/remove item from messageHandler.messages . 但是每当您从messageHandler.messages添加/删除项目时,都不会重新计算messages计算属性。

messages: Ember.computed('messageHandler.messages.[]', function() {
        return this.get('messageHandler.messages').filterBy('messageType', this.get('messageType'));
    }),

In the above code I used messageHandler.messages.[] as dependant key for the messages computed property so that it will be called for add/remove items. 在上面的代码中,我使用messageHandler.messages.[]作为messages计算属性的依赖键,以便为添加/删除项调用它。

Refer: https://guides.emberjs.com/v2.13.0/object-model/computed-properties-and-aggregate-data/ 参考: https//guides.emberjs.com/v2.13.0/object-model/computed-properties-and-aggregate-data/

Computed properties dependent on an array using the [] key will only update if items are added to or removed from the array, or if the array property is set to a different array. 使用[]键依赖于数组的计算属性仅在项目添加到数组或从数组中删除时更新,或者如果数组属性设置为其他数组。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM