Привязка свойства макета представления к контроллеру объекта - PullRequest
1 голос
/ 04 октября 2011

Я недавно начал работать в Sproutcore, который кажется действительно хорошим решением для разработки веб-приложений на стороне клиента. Однако документация не такая тщательная или краткая, как мне бы хотелось, поэтому я борюсь с несколькими вещами.

В частности, я пытаюсь привязать свойство layout одного из моих видов к объекту. Я справился с этим в некоторой степени, так как при отображении представления он использует свойства объекта, но проблема в том, что при обновлении объекта размеры представления не меняются. Однако, если изменение является постоянным, и я перезагружаю страницу, она использует новые значения.

Есть ли какое-то ограничение в свойствах компоновки привязки, чтобы они динамически обновлялись, или у меня здесь неправильный подход?

1 Ответ

1 голос
/ 04 октября 2011

Я не уверен, что этот подход будет работать.Контроллеры не должны иметь ничего общего со свойствами представления;контроллеры предназначены ТОЛЬКО для прокси-объектов.

Одной из альтернатив, которую вы можете рассмотреть, является использование метода 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 сообщает наблюдателю, что сам объект содержимого может измениться (если объект содержимого представлений может измениться).

...