Попробуйте 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
Вам нужно использовать 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>
Объект
не отправляет события. Хотя вы сделали переменную Bindable, свойства объекта, на который ссылается переменная currentLink
, не могут быть привязаны.
Вместо этого используйте ObjectProxy
.
[Bindable] public var currentLink:ObjectProxy = new ObjectProxy(emptyLink);
Первое, что вам нужно знать, это то, что привязка во Flex 3 не является двунаправленной. Выражение привязки гарантирует, что если источник выражения привязки (currentLink.trigger1) изменится, цель (TextInput) получит уведомление об изменении и обновит его соответствующим образом. Если вы хотите, чтобы привязка шла в другом направлении, есть как минимум два способа сделать это:
В Flex 4 вводится новый синтаксис для двунаправленной привязки @ {some.binding.expression}, но он недоступен во Flex 3.
Во второй части: ошибка, которую вы получаете, связана с привязкой к «универсальному» объекту-прототипу. Когда вы применяете тег метаданных [Bindable] к свойству или классу, компилятор MXMLC генерирует код AS, который включает в себя использование утилит привязки и наблюдателей за изменениями свойств для выполнения привязки. Однако вы не можете заставить объект-прототип сделать это, поскольку он является встроенным. Вы можете создать собственный класс ActionScript, который может быть привязан (или имеет определенные свойства, которые можно привязывать). Компилятор MXMLC сгенерирует класс, который реализует IEventDispatcher и, следовательно, поддерживает привязку.
Вот ссылка на liveocs для интерфейса. Это в значительной степени то, что было бы очевидным.
Цитата:
В общем, самый простой способ для определяемого пользователем класса получить возможности диспетчеризации событий - это расширить EventDispatcher.
Следовательно,
private static const emptyLink: EventDispatcher = {
Я не использую 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}" />
Что-то вроде этого, может быть?
В общем, причина, по которой вы получаете сообщение «невозможно привязать к свойству foo в классе, заключается в том, что вам не хватает геттера или сеттера для foo . Вы может также сделать foo привязанным к общедоступной переменной (хотя это нарушает инкапсуляцию)
Итак, вам понадобятся оба из них, чтобы она исчезла:
public function set foo (o:FooObject) : void {
...
}
или
public function get foo() : FooObject {
...
}