2014-11-27 2 views
0

Я хочу наблюдать вложенное свойство. У меня есть следующий Ember массив:Ember наблюдать свойство вложенного массива

specifications: [ 
    { 
    title: "specification name", 
    filters: [ 
     { 
     title: "example" 
     checked: false 
     }, 
     { 
     title: "example 2", 
     checked: true 
     } 
    ] 
    }, 
    ... 
] 

Я хочу, чтобы создать вычисляемое свойство:

activeFilters: (-> 
    Ember.computed.filterBy('[email protected]', 'checked', true), 
).property('[email protected]') 

фильтров.Сильны свойство активного не работает, я попробовал несколько комбинаций методов собственности, но никто не работал.

Является ли свойство, которое я пытаюсь создать на самом деле, возможно?

+0

ли вы имеете в виду 'specifications.filters. @ each'? –

+0

Я заметил, что вы никогда не принимаете ответы. Подумайте о том, чтобы закрыть некоторые из ваших вопросов. – givanse

+0

Я сделаю это прямо сейчас. – Hoetmaaiers

ответ

0

Да, это возможно. Дело в том, что для того, чтобы работать, вы не можете использовать массив JavaScript, вам нужно Ember.ArrayProxy, а затем вы можете получить доступ к его особым свойствам: http://emberjs.com/api/classes/Ember.ArrayProxy.html

specifications: Ember.ArrayProxy.create({ 
    content: [ 
    { 
     title: "specification name", 
    }, 
    ] 
}); 

Таким образом, вы будете иметь что-то вроде:

oneSpecChangedCheck: function() { 
    // don't know which, but someone changed 
    var s = this.get('specs'); 
    // loop and process 
    return s; 
}.property('[email protected]'), 

http://emberjs.jsbin.com/zohuzo/2/edit?html,js,console,output

+0

Хороший вопрос о ArrayProxy, хотя мой массив javascript был, например, для целей. Массив, с которым я работаю, поступает из данных Ember. Я создал jsbin, чтобы подражать моей проблеме: http://emberjs.jsbin.com/mijise/5/edit?html,js,output Как создать вычисленное свойство 'checkedFilters' на основе всех фильтров с' checked == true'. Вложенность фильтров внутри спецификаций делает это затруднительно для моей головы. – Hoetmaaiers

+0

Я не мог найти способ заставить его работать с 'filterBy', который бы возвращал элементы« напрямую ». Я цитирую «напрямую», потому что, если вы посмотрите на исходный код функции, вы увидите, что она использует '@ each' тоже. – givanse

+0

Я исправляю, это невозможно сделать с помощью 'filterBy'. Ближайшим было бы использование пользовательского «фильтра», но, на мой взгляд, это было бы сложнее, чем вычисляемое свойство, потому что они идут от внешних слоев к внутренним слоям, и вы хотите обратное. В той же самой скрипке, которую я опубликовал, есть код, который поможет вам сделать тот же вывод. – givanse

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