Bry*_*let 22 ember.js ember-data ember-router
更新#2
我发现当我重构过滤逻辑发生在PostController中的复合计算属性而不是在单个路径中时,我能够让它工作.解决方案最终依赖于由特定的#linkTo路由操作设置的单个动态变量,该操作触发了PostController计算属性中的过滤更改.我有很多工作需要赶上,所以我现在无法将解决方案发布到这个具体问题,但是当我可以时,我将详细解释下面的解决方案.现在我已经将@ twinturbo的答案标记为正确的,因为他在下面给出了部分但非常有用的指导.再次感谢男人!! 非常感激!!
更新#1
最新的小提琴是在http://jsfiddle.net/aZNRu/14/与@ twinturbo的帮助,在其后期父控制器中排序注释的"rank"属性,以及基本过滤.仍然存在在过滤的路线中没有获得自动更新视图并且创建新评论的问题.
原始问题
我看到有关将可排序mixin与过滤功能相结合的讨论,但就目前而言,正如您在我的jsfiddle示例中所看到的,我在排序和过滤方面都存在问题:
1)我无法弄清楚如何按其父控制器中的特定子属性进行排序.如果我们有:
App.Post = DS.Model.extend({
title: DS.attr('string'),
post: DS.attr('string'),
comments: DS.hasMany('App.Comment')
});
App.Comment = DS.Model.extend({
post: DS.belongsTo('App.Post'),
description: DS.attr('string'),
isActive: DS.attr('boolean'),
rank: DS.attr('number')
});
App.Router.map(function() {
this.resource("posts", { path: "/" }, function() {
this.resource('post', { path: ':post_id' }, function() {
this.route('active');
this.route('inactive');
});
});
});
Run Code Online (Sandbox Code Playgroud)
我希望能够按照"rank"属性按升序对每个帖子的评论进行排序.我想做的事情如下:
App.PostController = Ember.ObjectController.extend({
sortProperties: ['comments.rank']
Run Code Online (Sandbox Code Playgroud)
但是对于一个,我认为sortProperties只适用于arrayControllers,我认为它不能超过一个级别.我怎么能实现这个目标?
2)第二个问题是在过滤后的路由中没有获得自动更新视图.例如,如果您通过单击"活动注释"查看jsfiddle并进入活动过滤路径,则会对当前数据产生良好的过滤效果.但是,如果您保持活动路径并通过单击"添加新注释"创建一个处于活动状态的新记录,则该记录不会自动呈现在"活动"下,并且仅在您单击另一个路径然后返回到该路径时才会显示.
我是否在路由中错误地设置路由过滤或在模板中引用错误?
App.PostActiveRoute = Ember.Route.extend({
setupController: function() {
var post = this.controllerFor('post').get('model'),
comments = post.get('comments');
var activeComments = comments.filter(function(comment) {
if (comment.get('isActive')) { return true; }
});
this.controllerFor('post').set('filteredComments', activeComments);
}
});
<ul>
{{#each comment in filteredComments}}
<li>{{comment.rank}} {{comment.description}} - isActive: {{comment.isActive}}</li>
{{/each}}
</ul>
Run Code Online (Sandbox Code Playgroud)
任何有关这些问题的见解都将不胜感激!
aha*_*ins 39
但是对于一个,我认为sortProperties只适用于arrayControllers,我认为它不能超过一个级别.我怎么能实现这个目标?
你是正确的sortProperties只适用于Ember.ArrayController.
你真的不需要做任何想要实现这一点的事情.只需将comments数组包装在一个ArrayProxy包含可排序mixin 的新文件中.然后您可以对评论进行排序.那么你不需要nest属性,因为你正在排序一组注释.
请不要延长DS.ManyArray.没有必要这样做.
至于排序和过滤,您需要在此处使用合成.这意味着创建像filteredContent和sortedContent.然后你可以sortedContent使用filteredContent.
更新:
PostController = Ember.ObjectController.extend({
comments: (function() {
return Ember.ArrayProxy.createWithMixins(Ember.SortableMixin, {
sortProperties: ['rank'],
content: this.get('content.comments')
});
}).property('content.comments')
Run Code Online (Sandbox Code Playgroud)