Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 使控制器属性持久化_Ember.js - Fatal编程技术网

Ember.js 使控制器属性持久化

Ember.js 使控制器属性持久化,ember.js,Ember.js,记住控制器属性值的最佳方法是什么?请看这里: 我想记住元素是否已展开,但仅在当前会话期间,我不想将此值保存到数据存储中。问题是,请执行以下步骤: 扩展“艺术家” 展开“相册” 折叠“艺术家” 再次扩展“艺术家” “相册”也崩溃了!“Album”中的值isExpanded丢失,似乎ember每次都会重新创建控制器。如果您希望值在控制器的生命周期内保持不变,那么您需要将其保存在一个控制器中,该控制器将在您希望它存在的时间内保持作用域不变(我不确定您的全部意图是什么,但如果它确实是页面值的生命周

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

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

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

“相册”也崩溃了!“Album”中的值
isExpanded
丢失,似乎ember每次都会重新创建控制器。如果您希望值在控制器的生命周期内保持不变,那么您需要将其保存在一个控制器中,该控制器将在您希望它存在的时间内保持作用域不变(我不确定您的全部意图是什么,但如果它确实是页面值的生命周期,您可能希望将其存储在应用程序控制器上)


可以将属性添加到模型中

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

正如Anton所建议的,我将
isExpanded
属性移动到了模型中。正如您所说,Ember文档建议将属性保存在控制器中,我更愿意将其放在控制器中,但是如果我创建了多个具有多个相册的艺术家,那么维护属性值的代码就变得太复杂了。
actions: {
  toggleExpanded: function() {
    this.toggleProperty('model.isExpanded');
  }
}