当我的计算属性更新时,linkTo attr不会在ember RC1中获得更新

时间:2013-03-15 22:34:25

标签: ember.js

这是我的把手模板中的linkTo助手

{{#linkTo 'person.page' nextPage target="controller"}}Next{{/linkTo}}

这是我的控制器

PersonApp.PersonController = Ember.ArrayController.extend(Ember.PaginationMixin, {
    itemsPerPage: 2
});

这是mixin

中的计算属性
  nextPage: function() {

    var nextPage = this.get('currentPage') + 1;
    var availablePages = this.get('availablePages');

    if (nextPage <= availablePages) {
        return Ember.Object.create({id: nextPage});                                 
    }else{
        return Ember.Object.create({id: this.get('currentPage')});
    }   

  }.property('currentPage', 'availablePages'),

当我在每个return语句之前控制日志时,我可以看到页面ID是正确的......但是我的html没有更新。有什么简单的我在上面做错了吗?

每次我更改页面时都会看到打印件(因此我依赖的计算属性被触发)

这是一个完整的jsfiddle显示,在你第一次点击下一个...它仍然指向/#/ page / 2而不是/#/ page / 3

http://jsfiddle.net/RhTyx/2/

提前谢谢

1 个答案:

答案 0 :(得分:1)

首先:如果你不想把最重要的代码不是小提琴的一部分(FilterSortSliceMixin)链接起来,那就太好了。因此,尽管小提琴真的很大并且包含许多不必要的代码,但是无法测试任何东西。

关于您的问题: 我认为这不起作用,因为您指定的依赖属性不执行任何操作。您的{{#linkTo}}助手将用户发送到PersonPageRoute。这条路线的代码是:

PersonApp.PersonPageRoute = Ember.Route.extend({
    model: function(params) {
        return PersonApp.Person.find(params.page_id);
    },
    setupController: function(controller, model) {
        this.controllerFor('person').set('selectedPage', model.get('id'));
    }
});

因此,您将获得personcontroller并设置属性selectedPage。但是,您的从属密钥中未指定此属性。所以我建议这样做:

//maybe even remove currentPage??
}.property('currentPage', 'availablePages' , 'selectedPage'),

所以我猜你对你的命名感到困惑。我想,您应该拥有“selectedPage”或“currentPage”属性,对吧?

更新:这绝对是一个错误。下面是LinkView类的摘录,它与linkTo helper:

一起使用
var LinkView = Ember.View.extend({
  attributeBindings: ['href', 'title'], 
  href: Ember.computed(function() {
      var router = this.get('router');
      return router.generate.apply(router, args(this, router));
  })
});

如您所见,它未指定任何相关键。也许你可以重新打开/修补这个类并添加依赖键。不知道这可能是哪一个,但也许context