我对ember很新,我一直试图解决这个问题几天但我似乎无法在网上找到解决方案。
我有一个包含所有帖子列表的页面,每个帖子都有一个标签(如标签),“健身”,“知识”或“社交”。在页面的顶部,我有3个视图助手,每个视图助手代表一个标签(健身,知识或社交)。这些将用于过滤掉具有该特定标记名称的帖子。
我的问题是,当我点击视图助手时,我将“isSelected”属性切换为true,这会通过classNameBindings添加“isSelected”类。但是当我转移到网站上的不同路线并返回时,“isSelected”属性将重置为false并且“isSelected”类已被删除。当我重新访问这条路线时,如何保持这些值的持续性和完整性?
这是我的代码:
<script type="text/x-handlebars" data-template-name="global">
<ul class="categories">
<li>{{view App.Tag class="label fitness" text="fitness"}}</li>
<li>{{view App.Tag class="label knowledge" text="knowledge"}}</li>
<li>{{view App.Tag class="label social" text="social"}}</li>
</ul>
</script>
查看:
"use strict";
App.Tag = Ember.View.extend({
tagName: 'span',
template: Ember.Handlebars.compile('{{view.text}}'),
classNames: ['label'],
classNameBindings: ['isSelected'],
isSelected: false,
click: function () {
this.toggleProperty('isSelected');
}
});
我也尝试过使用带有操作的控制器,但这种方式保留了“isSelected”属性,但在重新访问路径时没有保留类的添加。
答案 0 :(得分:1)
这可能不太理想,但是为了保存应用程序的状态,可以将状态置于控制器中。您可能有一个简单的实现,但可能没有将isSelected指定为属性。以下工作,您可以查看jsbin here
App = Ember.Application.create();
App.Router.map(function() {
this.route('global');
});
App.IndexRoute = Ember.Route.extend({
model: function() {
return ['red', 'yellow', 'blue'];
}
});
App.GlobalController = Ember.Controller.extend({
activeTags: Ember.A()
})
App.Tag = Ember.View.extend({
tagName: 'span',
template: Ember.Handlebars.compile('{{view.text}}'),
classNames: ['label'],
classNameBindings: ['isSelected'],
isSelected: function () {
console.log("ON CHANGE", this.get('controller.activeTags'));
return this.get('controller.activeTags').contains(this.text);
}.property('controller.activeTags.@each'),
click: function () {
var tagArray = this.get('controller.activeTags');
if (tagArray.contains(this.text))
this.set('controller.activeTags', tagArray.without(this.text))
else
tagArray.pushObject(this.text);
}
});