2016-07-28 6 views
1

ich einen Service haben, und eine Eigenschaft imEmber berechnete Eigenschaft oder Beobachter innerhalb eines Dienstes

bucket: [] 

Später im Servicedienst erklären, füge ich etwas Eimer.

Ich versuche, in diesem Dienst eine Ember-berechnete Eigenschaft oder Beobachter einzurichten, um auf Änderungen im Bucket zu reagieren.

Etwas wie:

bucketListener: Ember.computed('bucket', function() { 
    //do stuff in response to something being added to or removed from the bucket 
} 

Aber ich kann das nicht bekommen zu arbeiten. Ich habe viele verschiedene Permutationen ausprobiert, mit Ember.computed und Ember.observer, aber ich kann nie EimerListener zu feuern.

Ich habe Prüfungen an Ort und Stelle und bin sicher, dass Bucket wie erwartet hinzugefügt oder entfernt wird, wie erwartet, aber BucketListener immer noch nicht aufgerufen wird.

Gibt es einen Trick, dies innerhalb eines Dienstes zu tun? Oder stöbere ich einfach etwas Grundlegendes?

+0

hmm ich dachte es wäre nur 'bucket. []' oder 'bucket. @ each' zumindest denke ich so war es in den 1.x Tagen mit' .properties' und '.observes'. Aber ich habe es gerade in einer Komponente versucht (nicht sicher, ob das einen Unterschied macht), aber das scheint nicht zu funktionieren. Ich bin jetzt selbst neugierig – lordofthefobs

+0

@lordofthefobs für die Einstellung Bucket-Eigenschaft müssen Sie PushObject anstelle von Push verwenden. Nur dann werden berechnete Eigenschaften ausgelöst. – kumkanillam

Antwort

1

berechneten Eigenschaften auszulösen, müssen Sie this.get('bucket').pushObject('something') anstelle der üblichen Push() verwenden. Wenn Sie nur auf den bucketListener zugreifen, wird die berechnete Eigenschaft aufgerufen.

Arbeitsbeispiel Twiddle. https://ember-twiddle.com/776ffb2be7e129655ef62e59b2dc8697?openFiles=services.cart.js%2C

+0

Danke, aber das funktioniert auch nicht für mich. –

+0

Sind Sie sicher, greifen Sie auf den bucketListener zu .. vergessen Sie nicht, Werte für berechnete Eigenschaften zurückzugeben. zur Zeit gibst du nichts zurück – kumkanillam

+0

Ja, leider, auch wenn ich eine Rückkehr hinzufüge, ruft es nicht auf. Ich habe eine einfache Konsolenlog-Anweisung zuerst in bucketListener, und es wird definitiv nicht ausgelöst. –

1

Service ist nicht anders als üblich Ember.Object in Bezug auf die berechneten Eigenschaften oder Beobachter. Verwenden Sie bitte .[], um nach Elementen zu suchen, die hinzugefügt oder entfernt werden, und um Beobachter zu interadieren, die ausgelöst werden sollen, wenn sich Eigenschaften ändern. Sie können auch Haupteigenschaft beobachten sicher sein, es wird Feuer:

bucketListener: Ember.observer('bucket', 'bucket.[]', function() { 
    //do stuff in response to something being added to or removed from the bucket 
} 
+0

Hinzugefügt. [], Aber es funktioniert immer noch nicht –

+0

Antwort aktualisiert. –

+0

Danke, Daniel, aber es funktioniert immer noch nicht. –