Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как взять ссылку на set-метод класса? (плюс др.вопросы по синтаксису) (http://www.flasher.ru/forum/showthread.php?t=132285)

bicubic_bublic 08.11.2009 21:56

Код AS3:

public class Controller {
 
        private var obj:Object;
        private var textField:TextField;
        private var propName:String;
 
        public function Controller(textField:TextField, obj:Object, propName:String) {
                this.textField = textField;
                this.obj = obj;
                this.propName = propName;
 
                update(true);
                textField.addEventListener(Event.CHANGE, onTFChange);
        }
 
        private function onTFChange(e:Event) {
                update();
        }
 
        public function update(back:Boolean = false) {
                if (back) {
                        textField.text = obj[propName];
                } else {
                        obj[propName] = textField.text;
                }
        }
 
}

для массива:
Код AS3:

new Controller(tf1, arr, 2);

для объекта:
Код AS3:

new Controller(tf1, obj, 'prop');


gloomyBrain 08.11.2009 22:03

Начните с этого:
Код AS3:

public class TFWithPromt extends TextField{
 
  public var prompt:String;
 
  public function TFWithPromt (promptText:String){
 
    super();
    this.prompt = promptText;
 
    this.addEventListener(MouseEvent.ROLL_OVER, showPrompt);
 
  }
 
  private function showPrompt(evt:Event){
    // показываем подсказку
  }
 
}

Потом как-то вот так:
Код AS3:

public class MyTF extends TFWithPromt {
 
  public static const DEFAULT_TEXT_1:String="поле 1";
  public static const DEFAULT_TEXT_2:String="поле 2";
  public static const DEFAULT_TEXT_3:String="поле 3";
 
  public function MyTF (type:Number = 0){
 
    super();
 
    switch(type):
    case 0:
        this.text = DEFAULT_TEXT_1;
    break;
 
  }
 
}

Ну и далее вешаем в конструкции switch любой листенер на любое действи и определяем каков будет вывод данных с MyTF в зависимости от type

chabapok 09.11.2009 00:33

gloomyBrain: Я понимаю что так можно, но вам не кажется ли, что несколько процедурно-ориентированно? (вопрос риторический) Где-то в дебрях свей библии Страуструпп критиковал такой метод.
2bicubic_bublic: ну я и сделал так, примерно.
* * *

Но все же хотелось не уклоняться от темы. Вариантов решения можно наплодить много, я это понимаю.

вопрос топика был: возможно ли передать ссылку на сеттер?

Уже совершенно не важно каким другим путем можно пойти. Вопрос ПРИНЦИПИАЛЬНЫЙ, ради интереса, и чтобы знать в будущем.

bicubic_bublic 09.11.2009 02:01

Цитата:

Сообщение от chabapok (Сообщение 864221)
Уже совершенно не важно каким другим путем можно пойти. Вопрос ПРИНЦИПИАЛЬНЫЙ, ради интереса, и чтобы знать в будущем.

ну что в гугле нашлось http://stackoverflow.com/questions/1...actionscript-3

и, видимо, это действительно так: нельзя получить ссылку на функцию сеттер-геттер

switcher! 09.11.2009 12:09

Код AS3:

package
{
        import flash.display.Sprite;
 
        public class Main extends Sprite {
                private var _testGetSet:uint;
                private var directLink:Function;
 
                function Main() {
                        testGetSet = 20;
                        directLink(30);
                        trace(_testGetSet);
                }
 
                public function get testGetSet():uint { return _testGetSet; }
                public function set testGetSet(value:uint):void {
                        _testGetSet = value;
                        if(!directLink) directLink = arguments.callee;
                }
        }
}


bicubic_bublic 09.11.2009 13:37

Цитата:

Сообщение от switcher! (Сообщение 864283)
Код AS3:

 ...


Проще тогда сделать будет таким образом:
Код AS3:

private var _parameter:...;
public function set parameter(value:...):void {
  setParameter(value);
}
public function setParameter(value:...):void {
  _parameter = value;
}


Партизан 09.11.2009 13:50

Не прикольно конечно из сеттера функцию делать, но я бы сделал так
Код AS3:

function(val:*):void{setter=val}


switcher! 09.11.2009 14:31

bicubic_bublic, я дал ответ в строгости с сабжем + потому, что:
Цитата:

Сообщение от bicubic_bublic (Сообщение 864227)
видимо, это действительно так: нельзя получить ссылку на функцию сеттер-геттер



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

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