2015-01-08 3 views
0

Только что начал изучать ember.js и в настоящее время работает над TODO MVC из своего руководства. Я сейчас на этом месте: http://emberjs.com/guides/getting-started/show-when-all-todos-are-complete/Тип входа = 'checkbox' двусторонняя привязка не работает?

Я заметил, что если я перехватил свойство «checked» для вычисленного свойства, двусторонняя привязка не работает так, как я ожидал. Это вычисляемое свойство не будет обновлять значение, если я установил/снял флажок вручную.

Вот упрощенный пример (как если бы их примеры не достаточно просто):

Вот код руль. Я только добавил «{{allAreDone}}» элемент просто чтобы быть в состоянии видеть значение в реальном масштабе времени:

//... 
<section id="main"> 
    {{outlet}} 
    {{input type="checkbox" id="toggle-all" checked=allAreDone}} 
    {{allAreDone}} 
</section> 
//... 

Здесь представлен JS сниппета для контроллера, но я упростил это такое, что это не основано на другой собственности :

// ... 
allAreDone: function(key, value) { 
    return false 
}.property() 
// ... 

Теперь, если я флажок (т.е. свойство 'проверено = истина), 'allAreDone' будет по-прежнему показывать ложные. Результат будет другим, если тип ввода - текст. Двухсторонний связывания флажок также будет работать, если это связано с не вычисленных собственности, таких как:

// ... 
allAreDone: false 
//will return false if I uncheked the checkbox directly and vice versa 
// ... 

Я просто хочу, чтобы подтвердить свое понимание поведения является правильным. И почему это будет отличаться от типа «текст».

Спасибо!

ответ

0

Вычисляемое определение свойства доступно только для чтения. Невозможно установить значение, только получить его. Адаптирование примера из the guides к вашей ситуации:

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

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

_allAreDone: false 

Это использует внутреннее свойство для хранения фактического значения, но что-то более конкретные проблемы, безусловно, относится.

+0

Вам нужно '.property ('_ allAreDone')' в конце и начальное значение для '_allAreDone', например, http://emberjs.jsbin.com/xubuja/1/edit?html,js,console, вывод – Kalman

+0

Действительно! Благодарю. –

+0

Спасибо. Раньше я думал, что текст по-разному. Но после того, как я попробовал еще раз, он выглядит совместимым с флажком. – ShadyStego

Смежные вопросы