2014-08-27 63 views
0

是否有可能覆蓋繼承模塊的延遲綁定配置?如何覆蓋繼承gwt模塊的延遲綁定配置

這裏有一個例子:

在該模塊中,我想用,一個延遲綁定聲明如下moduleA.gwt.xml

<replace-with class="A1Impl"> 
    <when-type-is class="A"/> 
</replace-with> 

<replace-with class="A2Impl"> 
    <when-type-is class="A"/> 
    <when-property-is name="p" value="1"/> 
</replace-with> 

聲明說:使用A1Impl類作爲默認和A2Impl類,如果財產p的值爲1

現在,在我的應用我想使用該模塊,並希望P1(因爲這控制了上述表示,但也有很多其他的延遲綁定配置)mymodule.gwt.xml

<inherits name='moduleA'/> 
<set-property name="p" value="1" /> 

但還我想覆蓋繼承模塊的延遲綁定配置,以使用我自己的實現A。我想這樣的事情我的模塊中,但它沒有工作:

<replace-with class="B1Impl"> 
    <when-type-is class="A"/> 
    <when-property-is name="p" value="1"/> 
</replace-with> 

這應該說是這樣的:不要使用A2Impl(繼承模塊中聲明),如果財產p具有價值1但用我改爲自己執行B1Impl

這可能嗎?

在此先感謝您的幫助。

回答

0

簡而言之,是的,您可以重新定義已設置的任何重新綁定規則。只需inherit您正在更改的模塊,然後在重新綁定規則後進行更改。

<inherits name="package.to.ModuleA" /> 
<set-property name="p" value="1" /> 

有了上面的代碼,p總是1,因此設置關於p的具體規則會有點愚蠢。除非p能夠成爲1以外的東西,否則你甚至不需要when-property-is規則。

replace-with看起來是正確的只要它上市後陳述inherits。出於這個原因,我總是鼓勵開發者首先列出所有的inherits規則,然後繼續執行任何replace-withgenerate-withset-property規則。

要了解更多細節,您需要發佈一些更具體的內容。

+0

謝謝!這是我缺乏的信息:「最後一個勝利!」 – Christoph 2014-08-28 09:08:02

+0

同樣的規則適用於'set-property'和'set-configuration-property'規則 - 稍後的規則贏了,所以你總是可以覆蓋已經設置一次的設置。 – 2014-08-28 15:05:53