【问题标题】:Why doesn't my Ember computed property get a second argument?为什么我的 Ember 计算属性没有第二个参数?
【发布时间】:2014-03-03 10:05:02
【问题描述】:

我希望将第二个参数传递给我的计算属性方法,但事实并非如此。我需要这个,所以我可以调用一个 setter 来用新数据保存我的模型。而不是这种行为,似乎在我保存模型之前再次调用了我的计算属性,并且破坏了新值 - 因为我只得到一个参数,所以根本不会调用 setter。计算属性:

changeBananas: function(k, v) {

  var bananas = this.get('bananas'), bananaList = [];

  console.log('args: ');
  console.log(arguments);

  bananaList = bananas.map(function(b) {

    return { color: b.get('color') };

  });

  if (arguments.length > 1) {

    console.log('I never get called!');

    return bananaList;
  }

  return bananaList;

}.property('bananas.@each')

完整的 JSBin:

http://jsbin.com/razimaxu/2/edit

我尝试了 propertyWillChange() 和朋友试图阻止观察者,但它没有做任何事情。还有另一种方法可以做到这一点吗?我的计算属性用于在可编辑字段中显示项目之前对项目进行一些格式化。我希望能够更改所述字段并像连接到常规模型属性的任何其他字段一样保存。

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    它接收两个参数的唯一情况是您尝试设置计算属性,例如this.set('changeBananas', [])

    如果它注意到依赖属性已更改,则不会同时使用两个参数调用它。

    【讨论】:

    • 谢谢。在那种情况下,有没有办法让它做到这一点?如何确定在计算属性函数之外设置的新值?
    • 你为什么不把你的 changeBananas 改成观察者呢?将其称为“modifyBananas”,而不是您的返回(在 arguments.length if 和最后一次返回中),将“changeBananas”属性设置为香蕉列表值,如下所示: this.set('changeBananas',bananaList)
    • 这让我得到“未捕获的类型错误:对象函数 () {”和“加载路由时出错:类型错误:无法调用未定义的方法 'set'。”
    • 接受原始答案,因为它确实正确回答了我的问题。然而,我的实际问题仍然存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 2020-07-31
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多