Ember.js 输入类型=';复选框';双向绑定不';不行?

Ember.js 输入类型=';复选框';双向绑定不';不行?,ember.js,Ember.js,刚开始学习ember.js,目前正在使用指南中的TODO MVC。我目前正在执行此步骤: 我注意到,如果我将“checked”属性与计算属性挂钩,双向绑定就不会像我预期的那样工作。如果我手动选中/取消选中复选框,该计算属性将不会更新该值 下面是一个简化的例子(好像他们的例子不够简单): 这是车把代码。我只添加了“{allAreDone}}”元素,以便能够实时查看值: //... <section id="main"> {{outlet}} {{input type="

刚开始学习ember.js,目前正在使用指南中的TODO MVC。我目前正在执行此步骤:

我注意到,如果我将“checked”属性与计算属性挂钩,双向绑定就不会像我预期的那样工作。如果我手动选中/取消选中复选框,该计算属性将不会更新该值

下面是一个简化的例子(好像他们的例子不够简单):

这是车把代码。我只添加了“{allAreDone}}”元素,以便能够实时查看值:

//...
<section id="main">
    {{outlet}}
    {{input type="checkbox" id="toggle-all" checked=allAreDone}} 
    {{allAreDone}}
</section>
//...
现在,如果我选中该框(即属性“checked”=true),“allAreDone”仍将显示false。如果输入类型为文本,则结果将不同。如果双向绑定复选框链接到非计算属性,例如:

// ... 
allAreDone: false
//will return false if I uncheked the checkbox directly and vice versa
// ... 
我只是想确认我对这种行为的理解是正确的。为什么它与“文本”类型不同呢


谢谢

您的计算属性定义是只读的。无法设置值,只能获取它。根据您的情况调整示例:

allAreDone: function(key, value) {
  // setter
  if (arguments.length > 1) {
    this.set('_allAreDone', value);
  }

  // getter
  return this.get('_allAreDone');
}.property('_allAreDone'),

_allAreDone: false

这使用了一个内部属性来存储实际值,但更具体的问题肯定适用。

最后需要一个
.property(“allAreDone”)
\u allAreDone
的初始值,谢谢。早些时候,我认为文本是不同的。但在我再次尝试后,它看起来与复选框一致。
allAreDone: function(key, value) {
  // setter
  if (arguments.length > 1) {
    this.set('_allAreDone', value);
  }

  // getter
  return this.get('_allAreDone');
}.property('_allAreDone'),

_allAreDone: false