【问题标题】:computed property that changes its value with action in Ember.js在 Ember.js 中通过操作更改其值的计算属性
【发布时间】:2015-06-14 16:46:53
【问题描述】:

我确实有一个控制器,它有一个动作 {{loadRight}},当我单击一个按钮时,它会将当前模型传递给控制器​​。

当我第一次加载应用程序时,我还使用 firstElement 计算属性,它从我的模型数组中提取第一个元素。

基本上,我想要做的是创建第二个计算属性,该属性将返回单击的当前模型,以便我可以在模板中使用此信息。

我创建了一个 currentElement 计算属性,但是由于我很擅长 javascript,因此我无法将当前模型从 action 方法传递给计算属性。我不断收到模型未定义错误。

如果有任何帮助,我将不胜感激。下面是我的控制器。

// controller works.js
import Ember from "ember";

export default Ember.Controller.extend({
  firstElement: function () {
    return this.get('model.firstObject');
  }.property('model.[]'),


  currentElement: function () {
    if(!currentModel) {
      currentModel = this.get('model.firstObject');
    }
    return currentModel;
  }.property('model.[]'),


  actions: {
    loadRight: function (currentElement) {
    console.log(currentElement);
    }

  }});

【问题讨论】:

标签: javascript ember.js controller


【解决方案1】:

您可以定义属性selectedElement(已单击)。当loadRight 被触发时,您可以将selectedElement 设置为selection。 那么currentElement 是简单的计算属性,依赖于model.firstObject 和selectedElement。

export default Ember.Controller.extend({
  firstElement: function () {
    return this.get('model.firstObject');
  }.property('model.[]'),

  selectedElement: null,

  currentElement: function () {
    return (this.get('selectedElement') || this.get(`firstElement`));
  }.property('firstElement', 'selectedElement'),

  actions: {
    loadRight: function (selection) {
      this.set('selectedElement', selection);
      return false; // or something transition logic 
    }
  }
});

【讨论】:

  • 应用启动时 currentElement 为空(在任何点击之前)。我想在这里将 currentElement 设置为 model.firstObject 。所以 if(!selectedElement) 我必须返回 this.get('model.firstObject')。
  • 固定currentElement
  • 有意思,.property('firstElement','selectedElement') 有什么作用?
  • 谢谢。我想我的最后一个问题是我在哪里设置 selectedElement 和选择。在hbs?这是我目前的 hbs。
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2013-11-29
  • 2012-07-27
  • 2020-12-01
相关资源
最近更新 更多