Я не уверен, что этот подход будет работать.Контроллеры не должны иметь ничего общего со свойствами представления;контроллеры предназначены ТОЛЬКО для прокси-объектов.
Одной из альтернатив, которую вы можете рассмотреть, является использование метода adjust
, определенного в классе SC.View
.Вы можете наблюдать за свойством наблюдения за моделью, которую оно представляет, а затем в вызове наблюдателя
this.adjust('height', 30); // or whatever
Я думаю, что adjust
также можно использовать как
* 1012.*
, не зная больше о том, что вы пытаетесь сделать, трудно сказать больше.
БОЛЬШЕ ДЕТАЛЕЙ
Хорошо, одна вещь о Sproutcore - это вынужно быть осторожным, чтобы не мешать рулевой петле.К сожалению, нет много документации по этому вопросу.Что я узнал, так это то, что вы не хотите, чтобы наблюдатели наблюдали за вещами в их объеме.Итак, вот схема того, что вы хотите сделать.
SC.View.extend({
layout: {...}, // initial properties
// binding to the text field that adjusting depends on, NOT on
// this view's content
outsidePropertyBinding: "binding.to.textField",
outsidePropertyDidChange: function(){
var outsideProperty = this.get('outsideProperty');
this.adjust({
// as shown before
})
}.observes('outsideProperty') // <-- this is how you create an observer
});
То, что я показал здесь, это то, как настроить на основе чего-то, что меняется за пределами этого представления .Я создал
1) Привязку к внешнему свойству, которое SC обновляет для вас
2) Наблюдатель на связанном свойстве, который срабатывает, как только значение установлено, и настраивает представление.Наблюдатель наблюдает за свойством в представлении, а не вне его .
Обратите внимание, что если ваше представление привязано к какому-либо контенту, а его свойство в этом контенте само изменяется,тогда вы бы сделали это немного по-другому.Вам не понадобится привязка к внешнему свойству, вместо этого вы можете просто наблюдать '*content.relevantproperty'
.*
перед content
сообщает наблюдателю, что сам объект содержимого может измениться (если объект содержимого представлений может измениться).