В Ember.js создание наблюдателя, который реагирует на изменения под-свойств, который является массивом, приводит к неинтуитивному поведению. Если наблюдатель напрямую наблюдает свойство массива, он не запускается, а если он наблюдает привязку к тому же свойству, он работает так, как ожидалось.Как наблюдать встроенные массивы в Ember-объектах?
Простой пример:
Рули:
<script type="text/x-handlebars">
<b>App.View1.name:</b> {{App.View1.name}} <br />
<b>App.View2.name:</b> {{App.View2.name}}
</script>
Javascript:
App = Em.Application.create();
// A common dependency for two views
var dependency = Em.Object.create({
prop: []
});
// Directly observes dependency.prop
App.View1 = Em.View.create({
dependency: dependency,
name: "Foo",
changeName: function() {
this.set("name", "Bar");
}.observes("dependency.prop")
});
// Indirectly observes dependency.prop via a binding
App.View2 = Em.View.create({
dependency: dependency,
name: "Foo",
changeName: function() {
this.set("name", "Bar");
}.observes("prop"),
propBinding: "dependency.prop"
});
// Updating the 'prop' property of dependency with an element.
dependency.get("prop").pushObject("An object.");
Я поставил его на JSFiddle здесь: http://jsfiddle.net/kbaXG/50/
H ere, App.View1.name
не обновляется (остается «Foo»), а App.View2.name
обновляется (до «Bar»).
Является ли это ожидаемым поведением и создает привязку приемлемое обходное решение?
Спасибо за ответ. Однако это не помогает моему пониманию привязок Ember.js, хотя меня немного смущает. Можете ли вы помочь мне понять разрозненное поведение в моей версии? Кроме того, как сделать _dependency_ привязкой решить эту проблему? –
Я обновил свой ответ ... – pangratz