【问题标题】:When my computed property is updated the linkTo attr does not get update in ember RC1当我的计算属性更新时,linkTo attr 在 ember RC1 中没有得到更新
【发布时间】:2013-03-15 22:34:25
【问题描述】:

这是我的车把模板中的 linkTo helper

{{#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,显示在您第一次单击“下一步”后......它仍然指向 /#/page/2 而不是 /#/page/3

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

提前谢谢你

【问题讨论】:

    标签: ember.js


    【解决方案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 帮助器一起使用:

    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

    【讨论】:

    • 啊是的-我的错(检查上面更新的小提琴)。不幸的是,更新后的属性没有解决问题
    • 嗯,这似乎是一个错误。该链接可以正常工作,但 href 也没有为我正确更新。
    • 这就解释了——感谢 github 上的研究发现这个问题!
    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 2014-12-23
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多