代码之家  ›  专栏  ›  技术社区  ›  Toran Billups

当我的计算属性更新时,linkTo属性不会在成员RC1中得到更新

  •  1
  • Toran Billups  · 技术社区  · 13 年前

    这是我的车把模板中的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'),
    

    当我在每个返回语句之前控制台日志时,我可以看到页面id是正确的。。。但是我的html没有更新。我在上面做错了什么?

    此外,每次更改页面时,我都会看到一个打印(所以我所依赖的计算属性正在被激发)

    这是一个完整的jsfiddle,显示在您第一次点击next之后。。。它仍然指向/#/page/2,而不是/#/pages/3

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

    提前谢谢

    1 回复  |  直到 13 年前
        1
  •  1
  •   mavilein    13 年前

    首先:如果你不链接一个最重要的代码不是fiddle的一部分的fiddle(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'));
        }
    });
    

    所以你正在获取人员控制器并设置属性 selectedPage 。但此属性未在依赖密钥中指定。因此,我建议:

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

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

    更新: 这绝对是一个bug。以下是与linkTo助手一起使用的LinkView类的摘录:

    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 ?