Привязка свойства макета представления к контроллеру объекта

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

Другие вопросы по тегам