Flex, Предупреждающий: Не мог связать со свойством 'нечто' на классе 'Объект' (классом не является IEventDispatcher),

Попробуйте email-spec

describe "POST /signup (#signup)" do
  it "should deliver the signup email" do
    # expect
    expect(UserMailer).to(receive(:deliver_signup).with("email@example.com", "Jimmy Bean"))
    # when
    post :signup, "Email" => "email@example.com", "Name" => "Jimmy Bean"
  end
end

больше примеров здесь: https://github.com/email-spec/email-spec#testing-in-isolation

24
задан Adam Tuttle 10 December 2010 в 20:03
поделиться

6 ответов

Вам нужно использовать ObjectProxy (как упоминает Четан), но вам также нужно использовать valueCommit, чтобы получить текст, который вы вводите на входе, НАЗАД в свой объект:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.utils.ObjectProxy;
              private static const emptyLink:Object = {
    id: -1, title:'',
    trigger1:'',trigger2:'',trigger3:'',trigger4:'',trigger5:'',
    linkTitle:'', linkBody:'',
    answer1:'',answer2:'',answer3:'',answer4:'',answer5:''
};

[Bindable] public var currentLink:ObjectProxy = new ObjectProxy(emptyLink);


private function handleClick():void
{
    trace(currentLink.trigger1);
}
]]>
</mx:Script>

<mx:Panel id="triggerPanel" title="Trigger" width="33%">
        <mx:VBox id="tpBoxes" width="100%" paddingBottom="5" paddingLeft="5" paddingRight="5" paddingTop="5">
                <mx:TextInput  id="trigger1" width="100%" textAlign="left" text="{currentLink.trigger1}" valueCommit="{currentLink.trigger1 = trigger1.text;}"/>

                <mx:Button label="Click" click="handleClick()"/>
        </mx:VBox>
</mx:Panel>        

</mx:WindowedApplication>
16
ответ дан 28 November 2019 в 23:49
поделиться

Объект не отправляет события. Хотя вы сделали переменную Bindable, свойства объекта, на который ссылается переменная currentLink , не могут быть привязаны.

Вместо этого используйте ObjectProxy .

[Bindable] public var currentLink:ObjectProxy = new ObjectProxy(emptyLink);
9
ответ дан 28 November 2019 в 23:49
поделиться

Первое, что вам нужно знать, это то, что привязка во Flex 3 не является двунаправленной. Выражение привязки гарантирует, что если источник выражения привязки (currentLink.trigger1) изменится, цель (TextInput) получит уведомление об изменении и обновит его соответствующим образом. Если вы хотите, чтобы привязка шла в другом направлении, есть как минимум два способа сделать это:

  1. Используйте тег mx: Binding для направления TextInput. текст обратно к объекту
  2. Вместо этого используйте BindingUtils, чтобы сделать это программно.

В Flex 4 вводится новый синтаксис для двунаправленной привязки @ {some.binding.expression}, но он недоступен во Flex 3.

Во второй части: ошибка, которую вы получаете, связана с привязкой к «универсальному» объекту-прототипу. Когда вы применяете тег метаданных [Bindable] к свойству или классу, компилятор MXMLC генерирует код AS, который включает в себя использование утилит привязки и наблюдателей за изменениями свойств для выполнения привязки. Однако вы не можете заставить объект-прототип сделать это, поскольку он является встроенным. Вы можете создать собственный класс ActionScript, который может быть привязан (или имеет определенные свойства, которые можно привязывать). Компилятор MXMLC сгенерирует класс, который реализует IEventDispatcher и, следовательно, поддерживает привязку.

5
ответ дан 28 November 2019 в 23:49
поделиться

Вот ссылка на liveocs для интерфейса. Это в значительной степени то, что было бы очевидным.

Цитата:

В общем, самый простой способ для определяемого пользователем класса получить возможности диспетчеризации событий - это расширить EventDispatcher.

Следовательно,

private static const emptyLink: EventDispatcher = {

1
ответ дан 28 November 2019 в 23:49
поделиться

Я не использую Flex очень давно, и это может не соответствовать вашим требованиям, но почему бы не использовать XML? Я считаю, что вы можете установить текстовое значение TextInput для атрибутов в XML.

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

[Bindable] private static const currentLink:XML = <root>
                                                    <trigger1 value=""/>
                                                    <trigger2 value="" />
                                                  </root>;
...
<mx:TextInput id="trigger1" width ... text="{currentLink.trigger1.@value}" />

Что-то вроде этого, может быть?

0
ответ дан 28 November 2019 в 23:49
поделиться

В общем, причина, по которой вы получаете сообщение «невозможно привязать к свойству foo в классе, заключается в том, что вам не хватает геттера или сеттера для foo . Вы может также сделать foo привязанным к общедоступной переменной (хотя это нарушает инкапсуляцию)

Итак, вам понадобятся оба из них, чтобы она исчезла:

public function set foo (o:FooObject) : void {
...
}

или

public function get foo() : FooObject {
...
}
2
ответ дан 28 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: