我的应用程序有两个控制器,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>
答案 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
});
希望有所帮助