【问题标题】:Manual Ember computed property not working while helper properties do手动 Ember 计算属性不起作用,而辅助属性起作用
【发布时间】:2014-06-09 05:10:12
【问题描述】:

我有以下具有许多计算属性的控制器,其中大多数使用辅助函数。在模板中引用时,所有这些都可以完美地工作。但是,如果我将这两个手动构建的计算属性添加到我的模板中,它们会失败,因为它们引用的属性在函数第一次运行时是未定义的。我从 numeric.js 中得到Uncaught TypeError: Cannot read property 'length' of undefined,因为如果是的话。我构建它的方式有什么问题?为什么使用帮助程序构建的计算属性可以很好地引用相同的基础模型数据?

  AdvisorAccountsController = Ember.ArrayController.extend
    open:          Ember.computed.filterBy "model", "status", "Open"
    pending:       Ember.computed.filterBy "model", "status", "Pending"
    openValues:    Ember.computed.mapBy "open", "value"
    pendingValues: Ember.computed.mapBy "pending", "value"
    openCount:     Ember.computed.alias "open.length"
    pendingCount:  Ember.computed.alias "pending.length"
    openTotal:     Ember.computed.sum "openValues"
    pendingTotal:  Ember.computed.sum "pendingValues"
    showPending:   Ember.computed.gt "pendingCount", 0
    openTotalUSD: (-> numeral(@get "openTotal").format "$0,0.00").property "openTotal"
    pendingTotalUSD: (-> numeral(@get "pendingTotal").format "$0,0.00").property "pendingTotal"

我认为正在发生的事情是模型在它被触发时仍在解析。这对于 sum 属性来说不是问题,因为结果值不依赖于其他东西,它们可以在自己的时间解决。

【问题讨论】:

    标签: ember.js coffeescript


    【解决方案1】:
    openCount: function(){
        return open && open.length;
        }.property('open.length')
    

    因此,只有当 open 已定义且“真实”时,您才会尝试访问 open 中的 length

    【讨论】:

    • 谢谢。我知道我可以添加代码来检查值,但我希望通过在控制器接管之前依靠完整的模型分辨率来避免这种情况。事实证明,无法确定这一点而不是我的计算属性本身是一个问题。但这是一种有用的检查方法。
    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 2016-04-05
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    相关资源
    最近更新 更多