2013-04-29 2 views
6

v1.0.0-rc.3 документация Ember по Ember.Array говорит:Использование Эмбера «отмечает (..)» наблюдать Возможность изменения некоторых массива

Вы можете использовать методы, определенные в этом модуле для доступа и изменения массива содержимое в KVO-дружественном виде. Вы также можете получать уведомления о членстве, если [sic] изменяется массив, изменив синтаксис свойства на .observes ('* myProperty. []').

Я попытался придумать минимальный пример наблюдения за изменениями массива, но не смог сделать огонь наблюдателя. Как выглядит рабочий образец?

P.S. извещение this gotcha.

+1

Вы можете настроить jsfiddle своего нерабочего примера? – intuitivepixel

ответ

9

О, эй, есть мой ответ!

Существует несколько способов, которыми вы можете наблюдать Em.A(). У вас есть .observes('a.[]'), .observes('[email protected]') и .observes('a.length'). Концепция такая же, как и любое свойство в Ember, но вам просто нужно напрямую манипулировать массивом, и наблюдатель должен стрелять. Очевидно, что использование метода set не будет работать в массиве (Ember), так что, возможно, именно там вы поступили не так?

Я изменил свой старый jsfiddle для учета наблюдаемого массива (я также обновил все до последних версий).

Я думаю, что важно помнить, что Ember Array на самом деле не массив - это объект с некоторыми пользовательскими функциями и свойствами, которые реализуют ваши обычные функции javascript массива. Поэтому вы не можете сделать что-то вроде: Em.A() = [1,2,3], потому что тип Em.A - это объект, а не массив.

Еще одна полезная заметка о том, что ArrayControllers имеют содержание массива Ember, а это означает, что вы должны соблюдать массив содержания, а не само содержание (т.е. не наблюдается arraycontroller.content, но вместо того, чтобы наблюдать arraycontroller.content.[]).

Вот почему вы должны наблюдать странное выглядящее свойство prop.[] на Ember Array, потому что значение Ember Array - это не то, что вы ожидаете.

+0

Спасибо Deif за эту отличную обратную связь и прозрение ... да, я не получил образец, работающий на какой-то схожий способ: я использовал (... придерживаясь вашего примера jsFiddle) 'this.person.push (3)' вместо 'this.person.pushObject (3)'. Нужно использовать метод 'pushObject (..)' для того, чтобы стрелка 'наблюдателей (..)' наблюдателей. [Я думаю, это то, что означает документация Ember с «KVO-совместимым»] (http://emberjs.com/api/classes/Ember.MutableArray.html#method_pushObject). – Abdull

+0

Awesome ... !!! @Deif –

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