2017-03-20 6 views
0

Dojo 1.9.3を使用しています。カスタムウィジェットは基本的に、他のDojoウィジェットおよびStruts2 JSPコンポーネントを含むことができるラッパーです。onChangeがDojoを使用してトリガーされる前に、入力に入力された値を変更できますか?

現在、サブコンポーネントに入力された両端の末尾の空白がサーバーに送信されるときに保存されるこれらのコンポーネントには問題があります。これは、ユーザーが値が有効だと考えるかもしれないバグにつながりますが、実際にはそうではありません。

現在、オンイベントを処理するために、次のコードを使用しています(簡潔にするために一部のコードは削除されています)。

var containedWidgetId = this.containedWidgetId; 
var containedWidget = registry.byId(this.containedWidgetId); 
if (typeof containedWidget === "undefined") { 
    containedWidget = dom.byId(this.containedWidgetId); 
} 

// get the Titlepane for later use. 
var titlePane = registry.byId(this.containedWidgetId 
       + "titleNodePane"); 

// Changes the Title and closes the TitlePane. 
this.own(on(containedWidget, "change", function(e) { 
    var newVal = ""; 
    // First check if the component value is stored as the displayed value. 
    if (typeof containedWidget.attr == "function" 
      && containedWidget.attr("displayedValue") !== null) { 
     newVal = containedWidget.attr("displayedValue"); 
    } 
    // if not, check if the onChange event is a Standard Dojo event. 
    if (typeof e === "object") { 
     newVal = containedWidget.value; 
    } 
    var newTitle = this.prefixTitle + newVal; 

    titlePane.set("title", newTitle); 
    this.close(); 
    // tell the main page to do whatever is needed after the TitlePane is changed. 
    this.onUpdate(); 
}.bind(this))); 

道場を指示する方法「このコンポーネントの前には、入力にtrim()を行い、このonChangeイベントをトリガー(道場のコンポーネントと同様に、通常のHTML成分を返すの両方であってもよい)」はありますか? Dojo入力以外のものについても作業する必要があることに注意してください。

私はaspect.beforeとaspect.aroundの両方を試しましたが、どちらかを使用すると入力引数を取得できないようです。動作しませんaspect.beforeの例として:

this.own(aspect.before(containedWidget, "onChange", function(e){ 
    if(typeof e === "string"){ 
     e = e.trim();     
    } 
    return [e]; 
})); 

コードはのonChange前にトリガ取得しますが、私は、入力値を取得するように見えることはできません。

答えて

0

お客様のセッターを使用してこの問題を解決できると思います。

セッター(特別な署名をdojo要件として定義する必要があります)は、値を検出し、その値を変更して(トリムを適用するなど)ウィジェットで使用できるようにします。カスタムセッター道場の道の

例:

_setFooAttr: function (value) { 
    value = value.trim(); // do your trim here 
    this._set('foo', value); 
} 

あなたは使用して戻ってトリミング値を得ることができます:

var value = this.get('foo');

カスタムゲッターとセッターの興味深い記事:

http://dojotoolkit.org/reference-guide/1.10/quickstart/writingWidgets.html#quickstart-writingwidgets

https://www.sitepen.com/blog/2013/10/16/dojo-faq-what-is-the-difference-between-set-and-_set/

+0

私が作成したカスタムウィジェットの値ではないので、これは助けになりません。カスタムウィジェットにはcontainsWidgetがあり、これは単なるDojo入力ウィジェットではありません。これは、HTML入力またはStruts2入力でもあります。これは、入力された値を前処理する必要があるこのウィジェットにあります。Dojoコンポーネントではない要素に対して_setValueAttrを変更することはできません。 – Nzall

関連する問題