如何从另一个控制器(而不是从模板)访问另一个控制器的属性

时间:2013-05-30 22:45:10

标签: javascript ember.js

我的应用程序有两个控制器,LoginController和RsvpController。我想加载一个与当前登录相关的Rsvps列表。

我的登录代码似乎有效 - 但我无法避免以下警告:  “DEPRECATION:不推荐使用Controller#controllerFor,请改用Controller#needs”

我也怀疑我没有采用这种方式做事,所以我很感激如何改进这些代码以使用更多的ember功能。

这是控制器:

App.RsvpController = Ember.ArrayController.extend({
    needs: ['login'],   // borrows from login controller
    content: [],

    loadModel : function() {
        var theCode = this.controllerFor('login').get('code');
        console.log("Loading Model for code " + theCode);

        var rsvpArray = App.Rsvp.find({
            code : theCode
        });
        this.set('content', rsvpArray);

        rsvpArray.addObserver('isLoaded', function() {
            console.log("Loaded rsvpArray" + Em.inspect(this));
        });


    }.property('controllers.login.code'),       // reload model if the user changes login
});

以下是index.html的一部分:

<script type="text/x-handlebars" id="rsvp">
    <p>placeholder for <b>RSVP</b></p>

    {{#if controllers.login.name }}
        <!-- rsvp code here -->
        Logged in with code {{controllers.login.code}}

        {{ loadModel }} <!-- call loadModel function to populate model when this is rendered -->

        {{#each model}}
            <p>givenName {{givenname}}</p>
        {{/each}}

    {{else}}
        <i>Please login first!</i>
    {{/if}}

</script>

1 个答案:

答案 0 :(得分:8)

你几乎就在那里,在你的模板中,你正在做的事情,弃用警告来自对controllerFor的调用,你可以避免像this.get('controllers.login')那样获得你的登录控制器,这里你的代码被修改:

App.RsvpController = Ember.ArrayController.extend({
  needs: ['login'], // borrows from login controller
  content: [],

  loadModel : function() {
    var theCode = this.get('controllers.login.code'); // here the change
    console.log("Loading Model for code " + theCode);

    var rsvpArray = App.Rsvp.find({
      code : theCode
    });
    this.set('content', rsvpArray);

    rsvpArray.addObserver('isLoaded', function() {
      console.log("Loaded rsvpArray" + Em.inspect(this));
    });

  }.property('controllers.login.code'), // reload model if the user changes login
});

希望有所帮助