Telerik Nativescript移动应用程序中的基本模糊事件

时间:2015-05-27 14:46:23

标签: javascript mobile telerik nativescript

我正在使用带有NativeScript的Telerik AppBuilder编写一个跨平台的移动应用程序。我正在努力弄清楚如何在TextField上获得基本的“模糊”或“onTextChanged”事件。我可以弄清楚如何做“点击”事件,但为什么要找到一个做“模糊”或“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 }}" />

这些都不起作用。有没有人知道如何做到这一点?

由于

4 个答案:

答案 0 :(得分:3)

据我所知,NativeScript中没有模糊(类似)事件。但是,您可以对文本更改时做出反应。

您要做的是利用Data Binding Mechanisms和。{  NativeScript中的Observable Object

简而言之,数据绑定将允许您将用户界面(通常在XML文件中描述)与业务模型/数据对象相连接。数据绑定可以是一种方式&#34;这意味着您在数据对象中所做的任何更改都将反映在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;

答案 1 :(得分:1)

在NativeScript 3中的FYI已添加blur事件,可以与TextViewTextField组件一起使用。

编辑现在还有一个focus事件即将从this pull request合并。

答案 2 :(得分:0)

好的,我没有将此标记为正确的解决方案,但如果有人看到这一点会有所帮助。在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);
        }
    });

请注意,您使用&#34; observableModule.knownEvents.propertyChange&#34;代替&#34; observable.Observable.propertyChangeEvent&#34;。您不必使用&#34; on&#34;而不是&#34; addEventListener&#34;正如我已经完成的那样。功能&#34; on&#34;字面上只是转身并调用&#34; addEventListener&#34;。

我希望这可以帮助那些人。

答案 3 :(得分:0)

在nativescript 3+中,这就是我捕捉模糊事件的方式。

示例代码在nativescript(core)

<强> 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>