Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   MVС в Flex (http://www.flasher.ru/forum/showthread.php?t=166408)

ekonomizer 02.09.2011 19:06

MVС в Flex
 
Здравствуйте подскажите пожалуйста как можно изменять начинку кастом компонента из модели.
Я написал небольшое приложение все в Application файле, решил перевести под MVC и столкнулся с проблемой изменения данных(передачи.)
Более подробно:

1)Есть контроллер:
в нем я гружу вид и передаю в него какие то данные.
Код:

<components:component id="comp" data="{data}"/>
2)Есть Вид - кастом компонент:
в нем я что то отображаю и по нажатию на кнопку вызываю метод Search у модели для проверки введенных пользователем данных.

Код AS1/AS2:

<s:Label id="label_1"/>
<s:ComboBox id="kombo_1"
                        dataProvider="{data}"
                        keyDown="keyDownHandler(event, data)"
                        />
 
 
public var model:GoodModel = new GoodModel();
 
        protected function keyDownHandler(event:KeyboardEvent, data:ArrayCollection):void
        {
                model.search(data,и еще параметры);
        }

3)Есть модель: и тут вся загвоздка, я хочу прямо из модели поменять скажем свойства у Combobox.

Код AS1/AS2:

public function search(data:ArrayCollection,.....);
{
        if(true)
          kombo_1.visible = false;
        else
          kombo_1.visible = true;
}

но компилятор говорит мне: "доступ неопределенного свойства."
Я пытался задавать пространство имен для места где лежит компонет, не помогло, не помогла передача идентификатора в метод Search()... ну и вообще застрял тут.
Подскажите пожалуйста, как можно из модели обратиться к виду напрямую и что то поменять.

fljot 02.09.2011 20:09

Лучше такое в моделях не делать. Модель ничего не знает о виде, она хранит состояние и, возможно, делает всякие запросы (если у вас нет концепции сервис-слоя).
Скрывать/показывать какие-то контролы — это забота чисто предствления. Пусть модель оповещает о своём изменении, а вид реагирует на это.

ekonomizer 02.09.2011 20:15

Полностью согласен и уже переписал код:)

Но вопрос этот все равно остался, можно как нибудь сделать такое обращение?

Silicium 02.09.2011 23:20

Разрешите вклиниться в тему и задать вопрос по MVC? (на случай, если разрешаете, привожу код вопрос ниже)
С превеликим удовольствием почитал http://www.flasher.ru/forum/showthread.php?t=138349 со всеми потрохами. Все здорово, но некоторые вопросы остались без ответа. Одна замечательная мысль, которая мне запомнилась "MVC у каждого свой"))))
Тем не менее, я сторонник того, что если пользуешься инструментом, научись пользоваться правильно, и только потом применяй нестандартные подходы (мож че лучше придумаешь).
Ладно, вопрос: зачем нужна V и M? Почему обработку всех событий с обеих сторон и вызов методов не отдать целиком контроллеру. Тогда и модель не будет знать ничего о виде, и вид о модели. И в случае, если мы что-то захотим чуть-чуть поменять, или перелопатить существенно, то достаточно будет изменить лишь крошку контроллер (насколько я понимаю, он должен быть "тонким"). В случае же, если у нас Представление подписывается на события Модели, а мы по каким-то причином убираем диспатч соответствующего события, то нам придется лезть и в код Представления.

alatar 03.09.2011 03:03

Цитата:

3)Есть модель: и тут вся загвоздка, я хочу прямо из модели поменять скажем свойства у Combobox.
Это не MVC
Цитата:

но компилятор говорит мне: "доступ неопределенного свойства."
А откуда в классе подели известно, что такое kombo_1?
Цитата:

Но вопрос этот все равно остался, можно как нибудь сделать такое обращение?
Передать ссылку на kombo_1 в search()


Часовой пояс GMT +4, время: 07:23.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.