2016-03-30 18 views
1

Ich habe eine Anwendung, die eine Navigationsleiste hat, die ich in "Application" Kontext gesetzt habe. Standardmäßig sind diese Navigationsleisten-Links deaktiviert und nur für eine bestimmte Aktion aus der Vorlage aktiviert.Controller-Eigenschaft von einem anderen Controller ändern

Die Application Controller, die den deaktivierten Status der Verbindung in Navigationsleiste enthält: -

App.ApplicationController = Ember.Controller.extend({ 
userName:"TestUser", 
firstLinkDisabled:true, 
actions:{ 
    handleToggle:function(){ 
     console.log("Handling application action with linkstatus="+this.firstLinkDisabled); 
     //this.set("firstLinkDisabled",false); 
     this.toggleProperty("firstLinkDisabled"); 
    } 
} 

})

Der Index-Controller, die die Aktion Application Controller sendet: -

App.IndexController = Ember.Controller.extend({ 
actions:{ 
    toggleApplicationButton:function(){ 
     this.controllerFor("Application").send("handleToggle"); 
    } 
} 

})

Anwendungsvorlage:

 

    <script type="text/x-handlebars"> 
    

{{#link-to 'first' disabled=firstLinkDisabled}}First link in application{{/link-to}}
<button {{action 'handleToggle'}}>Toggle Application Menu </button>

{{outlet}} </script>

Index Template

 

<script type="text/x-handlebars" id="index"> 
<button {{action 'toggleApplicationButton'}}>Toggle Application Menu </button> 
</script> 

Wenn ich auf "Toggle Anwendungsmenü" Taste I die folgende Ausgabe in der Konsole erhalten.

Console Output

Aber in Inspektor Ember die Eigenschaft "firstLinkDisabled" ändert sich nicht. Bild von Ember Inspector: - Ember Inspector Image

Die Verbindung bleibt deaktiviert.

Was mache ich hier falsch?
Darf ember nicht die Eigenschaft eines anderen Controllers ändern?
Wie man dieses Ding arbeiten lässt?

+0

Auch nach Ember verwenden. inject.controller() Das Problem ist das gleiche. Ich kann sehen, wie sich die Variable in der Konsole ändert. Aber im ** Ember Inspector bleibt die Variable gleich ** und die Verbindung ist immer noch deaktiviert. Ist das ein Fehler in Ember? –

Antwort

1

Hier ist ein einfaches Beispiel aus meinem Projekt:

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    /*first, inject a controller*/ 
    loginController: Ember.inject.controller('lang.login'), 
    /*some code*/ 

    actions: { 
    register: function() { 
     /*some code*/ 
     /*work with injected controller*/ 
     var c = this.get('loginController'); 
     c.set('identification', that.get('user').email); 
     c.set('password', that.get('user').plainPassword); 
     /*some code*/ 
    } 
    } 
}); 

ember docs

0

zuerst die Anwendungssteuerung in den Index-Controller

//index.js 
application: Ember.inject.controller(), 

Dann können Sie die Eigenschaft in dem Zugang injizieren Anwendungscontroller wie folgt:

//index.js 
application.toggleProperty("firstLinkDisabled"); 
1

Verwenden Ember.inject.controller()

App.IndexController = Ember.Controller.extend({ 
    appController: Ember.inject.controller("Application"), 
    actions:{ 
    toggleApplicationButton:function(){ 
     this.get("appController").send('handleToggle'); 
    } 
    } 
}) 

controllerFor Sie in den Routen

Sie können auch die alias

appController: Ember.computed.alias('controllers.Application') 

Siehe Emberjs verwenden können official documentation zum Detail

Verwandte Themen