2016-06-28 6 views
2

フィールドに顧客の書式設定を作成しようとしています(マスクされたテキストボックス機能を再現するため)。Nativescript Observable.propertyChangeEvent

私はobservableを持っており、私はpropertyChangeイベントをキャプチャしています。私の質問は:無限ループに入ることなく、イベントハンドラ内で観測されたプロパティの値を変更できますか?ここで

は私のコードです:

model.customer.addEventListener(Observable.propertyChangeEvent, function(data) { 
 
\t if (data.propertyName.toString() === 'homePhone') { 
 
     //Here is where I would like to change the value without triggering the event again 
 
     //The below code does not seem to be working 
 
\t data.value = formatPhone(data.value); 
 
\t } 
 
});

私はhttps://github.com/bthurlow/nativescript-maskedinputを見て、残念ながら、このモジュールは、データバインディングをサポートしていません。

ありがとうございます。あなたの助けに感謝。

答えて

0

サンプルアプリケーションでnativescript-maskedinputをテストしましたが、このカスタムビューのテキストプロパティをバインドできました。 addEventListenerを追加して、たとえばTextFieldのテキストプロパティを手動で更新したい場合は、そのプロパティが正しく更新されないと思います。さらに、私はいくつかのサンプルコードを添付しています。 メインpage.xml

<Page xmlns="http://schemas.nativescript.org/tns.xsd" xmlns:mi="nativescript-maskedinput" navigatingTo="navigatingTo"> 
    <StackLayout> 
    <Label text="Tap the button" class="title"/> 
    <mi:MaskedInput mask="1-999-999-9999? x999" hint="1-555-555-5555" text="{{ masktext }}" placeholder="#" /> 

    <Button text="tapToView" tap="onTap" /> 
    </StackLayout> 
</Page> 

メインpage.js

var observable_1 = require("data/observable"); // Event handler for Page "navigatingTo" event attached in main-page.xml 
var newObservable = new observable_1.Observable(); 
function navigatingTo(args) { 
    // Get the event sender 
    var page = args.object; 
    newObservable.set('masktext', ''); 

    page.bindingContext = newObservable; 
} 
exports.navigatingTo = navigatingTo; 
function onTap(args) { 
    var newvalue = newObservable.get('masktext'); 
    console.log('newValueget + ' + newvalue); 
    } 
exports.onTap = onTap; 
+0

私はこれを動作させることができませんでしたが、多分私は何かを逃した。もう一度試してみましょう。これは、このシナリオを処理する最も簡単な方法です。 – dpdragnev

+0

私はもう一度試してみると、それは私のためには機能しません。初期データは表示されません。私は通常のTextFieldを使用するとデータが表示されるため、データがあることがわかります。実際に、私がPeter Stoevから得た応答をhttp://stackoverflow.com/questions/38017201/nativescript-maskedinput-databindingに見ると、データバインディングが有効になっていないように見えます。 私は開発者に問題を提出しましたが、まだ回答を得ていません。 – dpdragnev

0

私はゲッターを上書きすることが可能であるかどうかわからないのですが、それが不可能な場合は、この操作を行うことができます。

function isPhoneFormatted(phone) { 
 
//your algorithm wich return true or false 
 
} 
 

 
model.customer.addEventListener(Observable.propertyChangeEvent, function(data) { 
 
\t if (data.propertyName.toString() === 'homePhone') { 
 
     //Here is where I would like to change the value without triggering the event again 
 
     //The below code does not seem to be working 
 
\t if (!isPhoneFormatted(data.value)) { 
 
\t data.value = formatPhone(data.value); 
 
\t } 
 
\t } 
 
});

ことに注意してくださいそれは十分にテストされていません!

+0

ニコラありがとう、これは良い考えです。私はそれを試してみましょう。 – dpdragnev

+0

これで、data.valueに新しい値を代入しようとすると、何も起こりません。このプロパティは読み込み専用ですか? – dpdragnev