Привязка свойства макета представления к контроллеру объекта
Я недавно начал работать в Sproutcore, который, кажется, является действительно хорошим решением для разработки веб-приложений на стороне клиента. Однако документация не такая тщательная или краткая, как хотелось бы, поэтому я борюсь с несколькими вещами.
В частности, я пытаюсь привязать свойство layout одного из моих видов к объекту. Я справился с этим в некоторой степени, так как при отображении представления он использует свойства объекта, но проблема в том, что при обновлении объекта размеры представления не меняются. Однако, если изменение является постоянным, и я перезагружаю страницу, она использует новые значения.
Есть ли какое-то ограничение в свойствах компоновки привязки, чтобы они динамически обновлялись, или у меня здесь неправильный подход?
1 ответ
Я не уверен, что этот подход будет работать. Контроллеры не должны иметь ничего общего со свойствами представления; контроллеры предназначены ТОЛЬКО для прокси-объектов.
Одна из альтернатив, которую вы можете рассмотреть, - это использование adjust
метод, определенный на SC.View
учебный класс. Вы можете сделать так, чтобы ваш объект наблюдал свойство в модели, которую он представляет, а затем в вызове наблюдателя.
this.adjust('height', 30); // or whatever
Я думаю adjust
также может быть использован как
this.adjust({
height: 10,
width: 20,...
})
не зная больше о том, что вы пытаетесь сделать, трудно сказать больше.
БОЛЕЕ ДЕТАЛЬНО
Итак, одна вещь о 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
сообщает наблюдателю, что сам объект содержимого может измениться (если объект содержимого представлений может измениться).