2

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

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

我也怀疑我没有以 ember 的方式做事,所以我很感激任何关于如何改进此代码以使用更多 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>
4

1 回答 1

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
});

希望能帮助到你

于 2013-05-30T22:59:42.813 回答