使控制器属性持久化

时间:2013-11-01 18:07:38

标签: ember.js

记住控制器属性值的最佳方法是什么?看看这里:

jsbin example

我想记住元素是否已展开,但仅在当前会话期间,我不想将此值保存到数据存储区中。问题是,执行以下步骤:

  • 展开“艺术家”
  • 展开“相册”
  • 折叠“艺术家”
  • 再次展开“艺术家”

“相册”也崩溃了! “Album”中的值isExpanded丢失了,似乎每次都会重新创建控制器。哪一个我们能够很好地解决isExpanded的价值?

2 个答案:

答案 0 :(得分:1)

如果你想让值持续超过控制器的生命周期,那么你需要将它保存在一个控制器中,只要你希望它存在就会保持在范围内(我不确定你的完整意图是什么) ,但如果它真的是页面值的生命周期,您可能希望将其存储在应用程序控制器上)

http://jsbin.com/osoFiZi/5/edit

App.AlbumController = Ember.ObjectController.extend({
  needs: ['artist'],
  actions: {
    toggleExpanded: function() {              
      this.toggleProperty('controllers.artist.isAlbumsExpanded');              
    }
  }
});

答案 1 :(得分:0)

您可以将属性添加到模型

App.Artist = DS.Model.extend({
  isExpanded: false, // this property will not be included into PUT request when you will save record
  name: DS.attr('string'),
  albums: DS.hasMany('album', {async: true})
});

并在控制器中切换它

actions: {
  toggleExpanded: function() {
    this.toggleProperty('model.isExpanded');
  }
}

http://jsbin.com/OtEBoNO/2/edit

相关问题