Ember berechnete Eigenschaft nicht aktualisiert

Bin ich mir auch nicht ganz sicher, warum meine berechnete Eigenschaft ist nicht die Rückkehr aktualisierten Werte.

Habe ich eine Liste von Optionen, die ein Benutzer kann durch klicken, und die Aktion updates eine Eigenschaft, die ein Glut-Objekt für die controller. Ich habe eine berechnete Eigenschaft, die loops durch das Objekt sieht für Schlüssel, die nicht-null-Werte für das Ember-Objekt-Eigenschaft, und wenn es nicht gefunden wird, gibt Sie false zurück, ansonsten true.

Hier sind die Sachen:

App.SimpleSearch = Ember.Object.extend({
    init: function() {
        this._super();

        this.selectedOptions = Ember.Object.create({
            "Application" : null,
            "Installation" : null,
            "Certification" : null,
            "Recessed Mount" : null,
            "Width" : null,
            "Height" : null,
            "Heating" : null,
            "Power" : null
        });
    },

    selectedOptions: {},

    numOfOptions: 0,

    allOptionsSelected: function() {
        var selectedOptions = this.get('selectedOptions');
        for (var option in selectedOptions) {
            console.log(selectedOptions.hasOwnProperty(option));
            console.log(selectedOptions[option] === null);
            if (selectedOptions.hasOwnProperty(option)
                && selectedOptions[option] === null) return false;
        }
        return true;
    }.property('selectedOptions')
});


App.SimpleSearchRoute = Ember.Route.extend({
    model: function() {
        return App.SimpleSearch.create({
            'SimpleSearchOptions': App.SimpleSearchOptions,
            'numOfOptions': App.SimpleSearchOptions.length
        });
    },
    setupController: function(controller, model) {
        controller.set('model', model);
    }
});


App.SimpleSearchController = Ember.ObjectController.extend({
    getProductsResult: function() {
        var productsFromQuery;
        return productsFromQuery;
    },

    setSelection: function (option, selectionValue) {
        this.get('selectedOptions').set(option, selectionValue);
        this.notifyPropertyChange('allOptionsSelected');
    },

    actions: {
        registerSelection: function(option) {
            console.log('registering selection');
            console.log(this.get('allOptionsSelected'));
            console.log(this.get('selectedOptions'));
            this.setSelection(option.qname, option.value);
        },

Die action im controller registerSelection ist er nur gut, aber ich sehe nur die console.log von der SimpleSearch Modell einmal. Sobald die Eigenschaft berechnet wird, die erste Zeit, es ist nicht die Aufmerksamkeit, nach, dass, was bedeutet, dass die berechnete Eigenschaft ist nicht die Veränderungen zu beobachten, zu selectedOptions immer wenn diese aufgerufen wird:

setSelection: function (option, selectionValue) {
    this.get('selectedOptions').set(option, selectionValue);
    this.notifyPropertyChange('allOptionsSelected');
},

Edit:

Ich tatsächlich mein Problem gelöst, ohne etwas zu ändern.

Ich geändert habe die folgende Zeile:

this.notifyPropertyChange('allOptionsSelected');

:

this.get('model').notifyPropertyChange('selectedOptions');

notifyPropertyChange muss aufgerufen werden, im Kontext des Modells (oder der Glut-Objekt, Beobachter von einer bestimmten Eigenschaft), und der string wird als argument ist der name der Eigenschaft, wurde aktualisiert.

Nachdem ich diese änderung vorgenommen, es funktionierte wie vorgesehen.

InformationsquelleAutor Nathan Lutterman | 2014-02-04

Schreibe einen Kommentar