首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EmberJS、Helpers和ComputedProperty

EmberJS、Helpers和ComputedProperty
EN

Stack Overflow用户
提问于 2016-06-14 08:46:36
回答 3查看 102关注 0票数 0

我有一个Helper,它接收一个元素数组,并根据第一个元素返回其他数组。

代码语言:javascript
复制
{{#each (sorted-strings myStrings) as |string|}}
  {{string}}
{{/each}}

“帮助者”的实现可以类似于:

代码语言:javascript
复制
// app/helpers/sorted-strings.js
import Ember from 'ember';

export function sortedStrings(params/*, hash*/) {
  return params[0].sort();
}

export default Ember.Helper.helper(sortedStrings);

该助手工作正常,但如果原始myString数组更改,则更改不会影响已经呈现的列表。

如何将ComputedProperty的行为与助手的结果结合起来

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-14 14:08:07

在经历了很多挣扎之后,我才发现正确的解决方案是声明一个组件,而不是一个助手。通过这种方式,我可以显式声明一个观察myStrings数组中变化的计算属性:

代码语言:javascript
复制
// app/components/sorted-strings.js
export default Ember.Component.extend({
  myStrings: null,
  sortedMyStrings: Ember.computed('myStrings', function() {
    return this.get('myStrings').sort();
  });
});

// app/templates/components/sorted-strings.hbs
{{#each sortedMyStrings as |string|}}
  {{string}}
{{/each}}

// template
{{sorted-strings myStrings=myStrings}}
票数 1
EN

Stack Overflow用户

发布于 2016-06-14 09:50:28

使用notifyPropertyChange(),它将通知助手数组已更改。我认为助手有一个对数组的引用,并且不知道它的内容或长度发生了变化

像这样

代码语言:javascript
复制
actions: {
    add() {
     this.get('myStrings').pushObject('testing');
     this.notifyPropertyChange('myStrings');
    }
  }

我已经更新了Twiddle -这是新的链接https://ember-twiddle.com/31dfcb7b208eb1348f34d90c98f50bbb?openFiles=controllers.application.js%2C

票数 3
EN

Stack Overflow用户

发布于 2016-06-14 09:23:24

将计算过的属性传递给助手应该可以正常工作。看看这个转盘

可能您的计算属性没有正确更新。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37807122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档