Telerik Nativescript 移动应用程序中的基本模糊事件
Basic blur event in a Telerik Nativescript Mobile App
我正在使用带有 NativeScript 的 Telerik AppBuilder 编写跨平台移动应用程序。我快要发疯了,想弄清楚如何在 TextField 上获得基本的 "blur" 或 "onTextChanged" 事件。我可以弄清楚如何做 "tap" 事件之类的事情,但是为什么很难找到一个人做 "blur" 或 "onTextChanged" 的样本?
我试过这个:
var tagField = view.getViewById(page, "tfDescription")
tagField.set("onblur", function(eventData) {
pageData.set("debug", "blur this field: " + JSON.stringify(eventData));
});
我也尝试了 xml 中我能想到的每个属性:
<TextField id="tfDescription" blur="blur" onblur="blur" onLoseFocus="blur" focusLost="blur" textChanged="blur" row="2" text="{{ description }}" />
None 这些作品。有人知道怎么做吗?
谢谢
据我所知,NativeScript 中没有 blur(-like) 事件。但是,您可以在文本更改时做出反应。
您要做的是利用 Data Binding Mechanisms 和
Observable Object 在 NativeScript 中。
简而言之,数据绑定将允许您将用户界面(通常在您的 XML 文件中描述)与您的业务 model/data 对象连接起来。数据绑定可以是 "one way",这意味着您在数据对象中所做的任何更改都将反映在 UI 中。它也可以是两种方式,这意味着您在 UI 中所做的任何更改也将反映在您的数据对象中。
在您的情况下,您需要两种方式的绑定,因为您希望 UI(用户输入文本)中发生的任何事情都反映在您的模型中。
例子
xml
假设你有这个 xml:
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
<StackLayout>
<TextField text="{{ description }}" />
</StackLayout>
</Page>
js
为了便于理解,我在行内添加了评论。
var observable = require("data/observable");
function pageLoaded(args) {
var page = args.object;
/**
* Creating a new Observable object.
*/
var contextObj = new observable.Observable();
/**
* Setting the property 'description' to 'hi there'.
* In your XML you'll attach this property to the
* Text field as such:
* <TextField text="{{ description }}" />
* This means that the Text field will, by default
* be prepopulated with 'Hi there'
*/
contextObj.set("description", "Hi there");
/**
* Attaching the observable object to the
* 'bindingContext' of the page. This is a
* special property to which you want to attach
* the object. By default bindings are two way.
*/
page.bindingContext = contextObj;
/**
* Event listener.
* When the user is changing the text in the UI, this gets propagated down
* to the contextObj which will change. Here we add an event listener for
* changes and log some information about the change that just happened.
*/
contextObj.addEventListener(observable.Observable.propertyChangeEvent, function (event) {
console.log('The object changed!');
console.log('Event: ' + event.eventName);
console.log('propertyName: ' + event.propertyName);
console.log('New value: ' + event.value);
console.log('');
});
}
exports.pageLoaded = pageLoaded;
好的,我没有将此标记为正确的解决方案,但如果有人看到它将会有所帮助。在 Telerik 中,NativeScript 似乎有一些细微的差别。您将需要学习阅读库文件,例如 tns_modules/data/observable/observable.js 以便自己解决这些问题。例如,要创建一个 属性 更改侦听器,这是您需要使用的语法:
pageData.on(observableModule.knownEvents.propertyChange, function(propertyChangeData){
if (propertyChangeData.propertyName != "debug"){
pageData.set("debug", propertyChangeData.propertyName + " has been changed and the new value is: " + propertyChangeData.value);
}
});
请注意,您使用 "observableModule.knownEvents.propertyChange" 而不是 "observable.Observable.propertyChangeEvent"。您不必像我所做的那样使用函数 "on" 而不是 "addEventListener"。函数 "on" 字面上只是转过来调用 "addEventListener"。
我希望这对那里的人有所帮助。
仅供参考,在 NativeScript 3 中添加了 blur
事件,可以与 TextView
或 TextField
组件一起使用。
编辑现在还有一个 focus
事件即将与 this pull request 合并。
在 nativescript 3+ 中,这就是我捕捉模糊事件的方式。
示例代码在nativescript(核心)中
example.js
const view = require("ui/core/view");
const textFieldModule = require("ui/text-field");
exports.pageLoaded = (args) => {
let page = args.object;
let myTextFieldView = view.getViewById(page, "myTextField");
myTextFieldView.on(textFieldModule.TextField.blurEvent, function(eventData) {
console.log('blur event triggered');
}, this);
}
example.xml
<Page loaded="pageLoaded">
...
<TextField
id="myTextField"
hint="My Text Field"
text="{{ myTextField }}" />
...
</Page>
我正在使用带有 NativeScript 的 Telerik AppBuilder 编写跨平台移动应用程序。我快要发疯了,想弄清楚如何在 TextField 上获得基本的 "blur" 或 "onTextChanged" 事件。我可以弄清楚如何做 "tap" 事件之类的事情,但是为什么很难找到一个人做 "blur" 或 "onTextChanged" 的样本?
我试过这个:
var tagField = view.getViewById(page, "tfDescription")
tagField.set("onblur", function(eventData) {
pageData.set("debug", "blur this field: " + JSON.stringify(eventData));
});
我也尝试了 xml 中我能想到的每个属性:
<TextField id="tfDescription" blur="blur" onblur="blur" onLoseFocus="blur" focusLost="blur" textChanged="blur" row="2" text="{{ description }}" />
None 这些作品。有人知道怎么做吗?
谢谢
据我所知,NativeScript 中没有 blur(-like) 事件。但是,您可以在文本更改时做出反应。
您要做的是利用 Data Binding Mechanisms 和 Observable Object 在 NativeScript 中。
简而言之,数据绑定将允许您将用户界面(通常在您的 XML 文件中描述)与您的业务 model/data 对象连接起来。数据绑定可以是 "one way",这意味着您在数据对象中所做的任何更改都将反映在 UI 中。它也可以是两种方式,这意味着您在 UI 中所做的任何更改也将反映在您的数据对象中。
在您的情况下,您需要两种方式的绑定,因为您希望 UI(用户输入文本)中发生的任何事情都反映在您的模型中。
例子
xml
假设你有这个 xml:
<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="pageLoaded">
<StackLayout>
<TextField text="{{ description }}" />
</StackLayout>
</Page>
js
为了便于理解,我在行内添加了评论。
var observable = require("data/observable");
function pageLoaded(args) {
var page = args.object;
/**
* Creating a new Observable object.
*/
var contextObj = new observable.Observable();
/**
* Setting the property 'description' to 'hi there'.
* In your XML you'll attach this property to the
* Text field as such:
* <TextField text="{{ description }}" />
* This means that the Text field will, by default
* be prepopulated with 'Hi there'
*/
contextObj.set("description", "Hi there");
/**
* Attaching the observable object to the
* 'bindingContext' of the page. This is a
* special property to which you want to attach
* the object. By default bindings are two way.
*/
page.bindingContext = contextObj;
/**
* Event listener.
* When the user is changing the text in the UI, this gets propagated down
* to the contextObj which will change. Here we add an event listener for
* changes and log some information about the change that just happened.
*/
contextObj.addEventListener(observable.Observable.propertyChangeEvent, function (event) {
console.log('The object changed!');
console.log('Event: ' + event.eventName);
console.log('propertyName: ' + event.propertyName);
console.log('New value: ' + event.value);
console.log('');
});
}
exports.pageLoaded = pageLoaded;
好的,我没有将此标记为正确的解决方案,但如果有人看到它将会有所帮助。在 Telerik 中,NativeScript 似乎有一些细微的差别。您将需要学习阅读库文件,例如 tns_modules/data/observable/observable.js 以便自己解决这些问题。例如,要创建一个 属性 更改侦听器,这是您需要使用的语法:
pageData.on(observableModule.knownEvents.propertyChange, function(propertyChangeData){
if (propertyChangeData.propertyName != "debug"){
pageData.set("debug", propertyChangeData.propertyName + " has been changed and the new value is: " + propertyChangeData.value);
}
});
请注意,您使用 "observableModule.knownEvents.propertyChange" 而不是 "observable.Observable.propertyChangeEvent"。您不必像我所做的那样使用函数 "on" 而不是 "addEventListener"。函数 "on" 字面上只是转过来调用 "addEventListener"。
我希望这对那里的人有所帮助。
仅供参考,在 NativeScript 3 中添加了 blur
事件,可以与 TextView
或 TextField
组件一起使用。
编辑现在还有一个 focus
事件即将与 this pull request 合并。
在 nativescript 3+ 中,这就是我捕捉模糊事件的方式。
示例代码在nativescript(核心)中
example.js
const view = require("ui/core/view");
const textFieldModule = require("ui/text-field");
exports.pageLoaded = (args) => {
let page = args.object;
let myTextFieldView = view.getViewById(page, "myTextField");
myTextFieldView.on(textFieldModule.TextField.blurEvent, function(eventData) {
console.log('blur event triggered');
}, this);
}
example.xml
<Page loaded="pageLoaded">
...
<TextField
id="myTextField"
hint="My Text Field"
text="{{ myTextField }}" />
...
</Page>