【问题标题】:Emberjs - using computed propertyEmberjs - 使用计算属性
【发布时间】:2015-08-29 22:38:55
【问题描述】:

这是我在模板中的内容:

{{check-box isChecked=hasPhoneForSecureAlerts visibleLabelLoc=".t.settingscontact.label.phone" class="checkbox-inline narrow" testId="chk-phone"}}

这是我在控制器中为这个属性所拥有的:

hasPhoneForSecureAlerts: Em.computed.bool('securePreferences.phoneLocalNumber'),

我们假设,最初这个属性设置为 true 并且复选框被选中,如果我取消选中复选框,这个属性被设置为 false 并且实际上不对应于 securePreferences.phoneLocalNumber 的状态。

要将其设置为初始值,当我们离开此屏幕而不保存时,我只是在相应路由的resetController中使用:

controller.set('hasPhoneForSecureAlerts',     controller.get('securePreferences.phoneLocalNumber') !== null);

这段代码正确吗?它实际上工作正常,但我在 Emberjs 文档中的任何地方都可以找到类似的东西。谢谢!

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    我不能 100% 确定您的代码是什么样的,但我认为您的问题与使用 Em.computed.bool 有关。在这种情况下,我将改用Ember.computed.alias,并创建了一个JSBin 来证明它有效。如果您仍然遇到问题,请告诉我。

    编辑:

    好的,我想我现在明白你想要做什么了。正如您所注意到的,这确实有效,但我可能会重新考虑您的处理方式,因为复选框旨在与之交互,而您所做的事情似乎非常不自然。相反,我会为您的复选框使用单独的变量并将其设为属性。这样,您的 property() 函数将在复选框更改值时运行。如果复选框从选中变为未选中,则您可以清除已存储的电话号码。我不确定当复选框从未选中变为选中时你会发生什么。这就是为什么我觉得使用复选框是一个有点奇怪的决定。也许您可以创建一个最小的 jsFiddle 来展示您打算发生的事情?

    【讨论】:

    • 其实我没有任何问题,这段代码是可以工作的。我的问题是这是否是正确的代码 - 这个计算属性可以以这种方式使用还是我需要做类似的事情:
    • text: "默认", textValue: function(key, value) { if(arguments.length === 1) { return this.get('text'); } else { this.set('text', value); } 返回 this.get('text'); }.property('文本')
    • jsfiddle.net/EW7xD/4 这实际上有工作的代码。我同意这不是自然的,但它确实有效!
    • lol 好的,我想它确实有效,但我想我会建议再看一下设计,因为未选中的更改->选中会暗示奇怪的行为。
    • 实际上,复选框与控制器的属性交互,该属性是计算属性。当我们通过路由/控制器等进入页面时,它实际上是根据保存在数据库中的内容来计算的。当我们取消选中它时,属性也设置为 false,我们可以使用属性的状态将其保存到数据库中。如果我们在没有保存的情况下离开页面,我们会将属性重置为之前的位置。不知何故,它运作良好 - 不知道幕后是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多