Nativescript Observable.propertyChangeEvent
我正在尝试在字段上创建一些客户格式(以重现屏蔽文本框功能) 我有一个可观察的,我正在捕获propertyChange事件。我的问题是:我是否可以修改事件处理程序中观察到的属性的值而不进入无限循环 这是我的密码:Nativescript Observable.propertyChangeEvent,nativescript,Nativescript,我正在尝试在字段上创建一些客户格式(以重现屏蔽文本框功能) 我有一个可观察的,我正在捕获propertyChange事件。我的问题是:我是否可以修改事件处理程序中观察到的属性的值而不进入无限循环 这是我的密码: model.customer.addEventListener(Observable.propertyChangeEvent,函数(数据){ if(data.propertyName.toString()=='homePhone'){ //在这里,我希望在不再次触发事件的情况下更改值
model.customer.addEventListener(Observable.propertyChangeEvent,函数(数据){
if(data.propertyName.toString()=='homePhone'){
//在这里,我希望在不再次触发事件的情况下更改值
//下面的代码似乎不起作用
data.value=formatPhone(data.value);
}
});代码>我已经在一个示例应用程序中测试了nativescript maskedinput,并且能够绑定此自定义视图的文本属性。关于这一点,如果您添加addEventListener并希望手动更新例如TextField text属性,我认为该属性将无法正确更新。此外,我附上一些样本代码。
main-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>
我不确定是否可以覆盖getter,但如果不可能,您可以这样做:
功能已格式化(电话){
//您的算法将返回true或false
}
model.customer.addEventListener(Observable.propertyChangeEvent,函数(数据){
if(data.propertyName.toString()=='homePhone'){
//在这里,我希望在不再次触发事件的情况下更改值
//下面的代码似乎不起作用
如果(!isPhoneFormatted(data.value)){
data.value=formatPhone(data.value);
}
}
});代码>我无法让它工作,但可能我错过了什么。让我再试一次。这是处理这种情况的最简单的方法。我再试了一次,但它对我不起作用。初始数据未显示。我知道我有数据,因为当我使用常规文本字段时,我会看到它。实际上,如果你看看我从Peter Stoev那里得到的回复,看起来数据绑定没有启用。我已经向开发人员提交了一个问题,但是还没有得到响应。好的,所以当我尝试为data.value分配一个新值时,什么都没有发生。这个属性是只读的吗?
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;