我正在创建一个无法连接到服务器的浏览器游戏。它使用夹具适配器将所有状态存储在Ember Data中。游戏的一部分是用户可以点击一个按钮并且"继续执行任务"。任务有一段时间。我希望在任务持续时间结束后更新游戏状态。
我通过定期更新任务控制器并检查任务结束之前的时间然后用结果更新状态来解决这个问题。但是我注意到当我导航到不同的路线时,它会破坏控制器。随着控制器的破坏,我没有定期更新任务。因此,即使持续时间过去,它也不会更新游戏的状态。
我不明白为什么控制器被摧毁了?这可能是因为控制器是物品控制器?这是我的第一个余烬应用程序,所以我可能设置错误。
如果有更好的方法可以解决这个问题,我很乐意听到它。
答案 0 :(得分:1)
是的,当路线离开时,itemController
被销毁:
App = Ember.Application.create();
App.Router.map(function() {
// put your routes here
this.route('other');
});
App.Router.reopen({
location: 'none'
});
App.IndexRoute = Ember.Route.extend({
model: function() {
return ['red', 'yellow', 'blue'];
}
});
App.IndexController = Ember.ArrayController.extend({
_setup: function () {
alert('_setup IndexController')
}.on('init'),
itemController: 'item'
});
App.OtherController = Ember.Controller.extend({
_setup: function () {
alert('_setup OtherController')
}.on('init')
});
App.ItemController = Ember.ObjectController.extend({
_setup: function () {
alert('_setup ItemController')
}.on('init'),
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://builds.handlebarsjs.com.s3.amazonaws.com/handlebars-v1.3.0.js"></script>
<script src="http://builds.emberjs.com/tags/v1.7.0/ember.js"></script>
<script type="text/x-handlebars">
<h2>Welcome to Ember.js</h2>
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each item in model}}
<li>{{item}}</li>
{{/each}}
</ul>
{{#link-to 'other'}}Other{{/link-to}}
</script>
<script type="text/x-handlebars" data-template-name="other">
{{#link-to 'index'}}Back{{/link-to}}
</script>
&#13;
在这种情况下,我要说创建一个附加到应用程序控制器的服务对象,即使用Ember.run.later()
安排更新。
另请注意,FixtureAdapter无法实际存储数据。