{"id":2228,"date":"2016-04-18T22:29:30","date_gmt":"2016-04-18T22:29:30","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2228"},"modified":"2025-06-13T20:15:41","modified_gmt":"2025-06-14T03:15:41","slug":"couchbase-mobile-in-a-cross-platform-telerik-nativescript-app","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/","title":{"rendered":"Couchbase Mobile en una aplicaci\u00f3n Telerik NativeScript multiplataforma"},"content":{"rendered":"<p>A nivel personal, soy un gran fan de Telerik <a href=\"https:\/\/www.nativescript.org\">NativeScript<\/a>. Se trata de un marco de desarrollo multiplataforma para crear <strong>nativo<\/strong> aplicaciones Android e iOS utilizando un \u00fanico conjunto de c\u00f3digos, siendo ese conjunto de c\u00f3digos JavaScript. Tuve que poner \u00e9nfasis en la parte nativa porque es uno de los \u00fanicos frameworks multiplataforma que no utiliza una vista web para mostrar el contenido. Esto a su vez crea una aplicaci\u00f3n que tiene un rendimiento incre\u00edble.<\/p>\n<p>Hasta ahora no hab\u00eda una buena soluci\u00f3n para almacenar datos en una aplicaci\u00f3n NativeScript. \u00a1Eso es hasta ahora!<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/april\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/couchbase-nativescript-image.png\" \/><\/p>\n<p>Con la ayuda de Telerik y el equipo de NativeScript, pude crear una <a href=\"https:\/\/github.com\/couchbaselabs\/nativescript-couchbase\">Plugin Couchbase Lite para NativeScript<\/a> que te permite aprovechar el poder de NoSQL en tu aplicaci\u00f3n m\u00f3vil. Cuando se empareja con Couchbase Sync Gateway, los datos se pueden sincronizar entre dispositivos y plataformas.<\/p>\n<p>Vamos a ver qu\u00e9 se necesita para empezar con <a href=\"https:\/\/developer.couchbase.com\/mobile?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Couchbase M\u00f3vil<\/a> en tu aplicaci\u00f3n NativeScript.<\/p>\n<h2>Requisitos<\/h2>\n<p>Hay algunos requisitos para que esto sea posible.<\/p>\n<ul>\n<li>NativeScript 1.7+<\/li>\n<li>El SDK de Android (si se crean aplicaciones para Android)<\/li>\n<li>Xcode y un Mac (si se crean aplicaciones para iOS)<\/li>\n<li>Couchbase Sync Gateway (para sincronizaci\u00f3n)<\/li>\n<\/ul>\n<p>No es necesario crear tanto para Android como para iOS, pero sin duda es conveniente.<\/p>\n<h2>Creaci\u00f3n de un nuevo proyecto NativeScript<\/h2>\n<p>Vamos a crear una sencilla aplicaci\u00f3n de lista de nombres que se sincroniza entre dispositivos. Para ello, ejecute lo siguiente desde un s\u00edmbolo del sistema (Windows) o Terminal (Mac y Linux):<\/p>\n<pre><code>\r\ntns create CouchbaseProject\r\ncd CouchbaseProject\r\ntns platform add ios\r\ntns platform add android\r\n<\/code><\/pre>\n<p>Recuerde, si no est\u00e1 utilizando un Mac, no puede a\u00f1adir y construir para la plataforma iOS. En adelante, el s\u00edmbolo del sistema o Terminal debe utilizar <strong>CouchbaseProject<\/strong> como directorio de trabajo.<\/p>\n<h2>Incluido el SDK de Couchbase Lite<\/h2>\n<p>Con el proyecto creado es hora de incluir el plugin Couchbase Lite para su uso. Desde la Terminal o S\u00edmbolo del sistema, ejecuta lo siguiente:<\/p>\n<pre><code>\r\ntns plugin add nativescript-couchbase\r\n<\/code><\/pre>\n<p>Esto incluir\u00e1 el plugin para cualquier plataforma que se haya a\u00f1adido al proyecto.<\/p>\n<h2>Desarrollo de la aplicaci\u00f3n<\/h2>\n<p>Con el proyecto creado necesitamos crear algunos archivos y directorios. Sigue adelante y a\u00f1ade lo siguiente:<\/p>\n<pre><code>\r\nmkdir app\/views\r\nmkdir app\/views\/list\r\nmkdir app\/views\/create\r\ntouch app\/views\/list\/list.js\r\ntouch app\/views\/list\/list.xml\r\ntouch app\/views\/create\/create.js\r\ntouch app\/views\/create\/create.xml\r\n<\/code><\/pre>\n<p>Los archivos anteriores es donde vamos a pasar la mayor parte de nuestro tiempo, pero antes de saltar en, abrir el proyecto de <strong>app\/app.js<\/strong> y cambie la l\u00ednea correspondiente por la siguiente:<\/p>\n<pre><code>\r\napplication.start({ moduleName: \"views\/list\/list\" });\r\n<\/code><\/pre>\n<p>Esto indica a la aplicaci\u00f3n NativeScript que el <strong>lista<\/strong> ser\u00e1 nuestra primera vista.<\/p>\n<h3>Creaci\u00f3n de la l\u00f3gica de la aplicaci\u00f3n<\/h3>\n<p>Los archivos l\u00f3gicos de la aplicaci\u00f3n son los archivos JavaScript. Un archivo controlar\u00e1 la l\u00f3gica detr\u00e1s de nuestra vista de lista y el otro controlar\u00e1 la l\u00f3gica detr\u00e1s de nuestro formulario de creaci\u00f3n de nombre. Comenzando con la l\u00f3gica de la lista, abra el archivo del proyecto <strong>app\/views\/list\/list.js<\/strong> e incluya el siguiente c\u00f3digo:<\/p>\n<pre><code>\r\nvar couchbaseModule = require(\"nativescript-couchbase\");\r\nvar observableArrayModule = require(\"data\/observable-array\");\r\nvar frameModule = require(\"ui\/frame\");\r\n\r\nvar database;\r\nvar personList;\r\n\r\nfunction pageLoaded(args) {\r\n    var page = args.object;\r\n\r\n    personList = new observableArrayModule.ObservableArray([]);\r\n    database = new couchbaseModule.Couchbase(\"test-database\");\r\n\r\n    database.createView(\"people\", \"1\", function(document, emitter) {\r\n        emitter.emit(JSON.parse(document)._id, document);\r\n    });\r\n\r\n    refresh();\r\n    page.bindingContext = {personList: personList};\r\n}\r\n\r\nfunction refresh() {\r\n    personList.splice(0);\r\n\r\n    var rows = database.executeQuery(\"people\");\r\n\r\n    for(var i in rows) {\r\n          if(rows.hasOwnProperty(i)) {\r\n              personList.push(JSON.parse(rows[i]));\r\n          }\r\n    }\r\n}\r\n\r\nfunction create() {\r\n    frameModule.topmost().navigate({moduleName: \"views\/create\/create\"});\r\n}\r\n\r\nexports.pageLoaded = pageLoaded;\r\nexports.refresh = refresh;\r\nexports.create = create;\r\n<\/code><\/pre>\n<p>Hay muchas cosas sucediendo en el archivo l\u00f3gico anterior, as\u00ed que vamos a desglosarlo. Lo primero que vamos a hacer es incluir algunas librer\u00edas JavaScript:<\/p>\n<pre><code>\r\nvar couchbaseModule = require(\"nativescript-couchbase\");\r\nvar observableArrayModule = require(\"data\/observable-array\");\r\nvar frameModule = require(\"ui\/frame\");\r\n<\/code><\/pre>\n<p>Primero debe importarse el plugin que se instal\u00f3. Todos los datos le\u00eddos de la base de datos se almacenar\u00e1n en un array observable. Esto es para que podamos suscribirnos a los cambios de datos y vincular los datos a la interfaz de usuario. Finalmente se importa el frame para que podamos navegar a otras p\u00e1ginas.<\/p>\n<p>Para abrir una base de datos NoSQL Couchbase en particular ejecutar\u00edamos el siguiente comando:<\/p>\n<pre><code>\r\ndatabase = new couchbaseModule.Couchbase(\"test-database\");\r\n<\/code><\/pre>\n<p>El comando anterior abrir\u00e1 la base de datos si existe o crear\u00e1 y abrir\u00e1 la base de datos si no existe.<\/p>\n<pre><code>\r\ndatabase.createView(\"people\", \"1\", function(document, emitter) {\r\n    emitter.emit(JSON.parse(document)._id, document);\r\n});\r\n<\/code><\/pre>\n<p>Si es la primera vez que trabajas con NoSQL, el fragmento anterior puede parecerte muy extra\u00f1o. Se trata de la creaci\u00f3n de una vista MapReduce. En lugar de escribir una sentencia SQL como se ve en SQLite, estamos creando vistas MapReduce que podemos consultar para obtener datos. La vista anterior devolver\u00e1 un par clave-valor de todos los documentos donde la clave es el id del documento y el valor es el propio documento. Esta vista se llamar\u00e1 <strong>gente<\/strong>.<\/p>\n<p>Una vez creada la vista, hay que consultarla. Para ello se utiliza la funci\u00f3n <strong>actualizar<\/strong> funci\u00f3n. Antes de llegar a la funci\u00f3n de actualizaci\u00f3n, f\u00edjese en la \u00faltima l\u00ednea del archivo <strong>pageLoaded<\/strong> funci\u00f3n. Esto muestra que vamos a vincular la funci\u00f3n <strong>personList<\/strong> a nuestra interfaz de usuario. Ve\u00e1moslo <strong>actualizar<\/strong> funci\u00f3n:<\/p>\n<pre><code>\r\nfunction refresh() {\r\n    personList.splice(0);\r\n\r\n    var rows = database.executeQuery(\"people\");\r\n\r\n    for(var i in rows) {\r\n          if(rows.hasOwnProperty(i)) {\r\n              personList.push(JSON.parse(rows[i]));\r\n          }\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>Cada vez que realicemos una consulta, la lista se restablecer\u00e1 y se volver\u00e1 a rellenar. La vista s\u00f3lo se consultar\u00e1 cuando se cargue la p\u00e1gina. Veremos por qu\u00e9 m\u00e1s adelante en este tutorial.<\/p>\n<p>Con el <strong>app\/views\/list\/list.js<\/strong> podemos centrarnos en el archivo l\u00f3gico que hay detr\u00e1s del formulario de creaci\u00f3n. Abra el archivo <strong>app\/views\/create\/create.js<\/strong> e incluya el siguiente c\u00f3digo:<\/p>\n<pre><code>\r\nvar couchbaseModule = require(\"nativescript-couchbase\");\r\nvar observableArrayModule = require(\"data\/observable-array\");\r\nvar frameModule = require(\"ui\/frame\");\r\n\r\nvar database;\r\nvar tfFirstName;\r\nvar tfLastName;\r\n\r\nfunction pageLoaded(args) {\r\n    var page = args.object;\r\n\r\n    personList = new observableArrayModule.ObservableArray([]);\r\n    database = new couchbaseModule.Couchbase(\"test-database\");\r\n\r\n    tfFirstName = page.getViewById(\"firstname\");\r\n    tfLastName = page.getViewById(\"lastname\");\r\n\r\n    page.bindingContext = {};\r\n}\r\n\r\nfunction save() {\r\n    database.createDocument({\r\n        \"firstname\": tfFirstName.text,\r\n        \"lastname\": tfLastName.text\r\n    });\r\n    frameModule.goBack();\r\n}\r\n\r\nexports.pageLoaded = pageLoaded;\r\nexports.save = save;\r\n<\/code><\/pre>\n<p>Este archivo es mucho m\u00e1s ligero en comparaci\u00f3n con el anterior. Esencialmente estamos capturando los elementos del formulario que a\u00fan tenemos que crear. Cuando llamamos al archivo <strong>guardar<\/strong> tomar\u00e1 los valores de los campos del formulario y crear\u00e1 el documento en Couchbase. Sin esquemas SQL ni tonter\u00edas que te ralenticen a la hora de desarrollar. Uno de los mayores beneficios de usar NoSQL.<\/p>\n<p>La l\u00f3gica est\u00e1 ahora completa, por ahora, y podemos pasar a la interfaz de usuario.<\/p>\n<h3>Dise\u00f1o de una interfaz de usuario multiplataforma<\/h3>\n<p>El c\u00f3digo de la interfaz de usuario es corto y sencillo. Recuerda que nuestra lista s\u00f3lo contendr\u00e1 informaci\u00f3n sobre los usuarios que a\u00f1adamos. Abra el proyecto <strong>app\/views\/list\/list.xml<\/strong> e incluya el siguiente c\u00f3digo:<\/p>\n<pre><code>\r\n\r\n    \r\n  \r\n   \r\n    \r\n   \r\n  \r\n \r\n    \r\n        \r\n            \r\n                <label><\/label>\r\n            \r\n        \r\n    \r\n\r\n<\/code><\/pre>\n<p>Cuando se carga la p\u00e1gina, se llama a la funci\u00f3n <strong>pageLoaded<\/strong> funci\u00f3n. La barra de acciones dispone de un \u00fanico bot\u00f3n para navegar a la funci\u00f3n <strong>crear<\/strong> p\u00e1gina. Por \u00faltimo, la vista de lista iterar\u00e1 sobre las p\u00e1ginas <strong>personList<\/strong> que se cre\u00f3 en el archivo l\u00f3gico.<\/p>\n<p>Cuando se trata del formulario de creaci\u00f3n, tambi\u00e9n hay que incluir una peque\u00f1a cantidad de c\u00f3digo XML. Abra el archivo <strong>app\/views\/create\/create.xml<\/strong> e incluya el siguiente c\u00f3digo:<\/p>\n<pre><code>\r\n\r\n    \r\n  \r\n   \r\n    \r\n   \r\n  \r\n \r\n    \r\n        <label><\/label>\r\n        \r\n        <label><\/label>\r\n        \r\n    \r\n\r\n<\/code><\/pre>\n<p>De nuevo el <strong>pageLoaded<\/strong> es llamado al cargar la p\u00e1gina. La barra de acciones tiene un \u00fanico bot\u00f3n para guardar los datos de Couchbase, y el formulario contiene datos que se leen a trav\u00e9s del archivo l\u00f3gico que creamos previamente.<\/p>\n<p>Deber\u00edamos tener una aplicaci\u00f3n completamente funcional que utilice Couchbase para almacenar datos. Sin embargo, en este momento esta aplicaci\u00f3n est\u00e1 s\u00f3lo fuera de l\u00ednea. Los datos no se sincronizan.<\/p>\n<h2>Incluyendo Couchbase Sync Gateway para Replicaci\u00f3n de Datos<\/h2>\n<p>Para sincronizar los datos de la aplicaci\u00f3n entre Couchbase Server y otros dispositivos, se debe utilizar la funci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/nosql-databases\/downloads\/\">Pasarela de sincronizaci\u00f3n Couchbase<\/a> debe incluirse junto con un archivo de configuraci\u00f3n especial. Para simplificar las cosas aqu\u00ed, no vamos a entrar en profundidad cuando se trata de un archivo de configuraci\u00f3n de Sync Gateway. Algo como esto ser\u00e1 suficiente:<\/p>\n<pre><code>\r\n{\r\n    \"log\":[\"CRUD+\", \"REST+\", \"Changes+\", \"Attach+\"],\r\n    \"databases\": {\r\n        \"test-database\": {\r\n            \"server\":\"walrus:\",\r\n            \"sync\":`\r\n                function (doc) {\r\n                    channel (doc.channels);\r\n                }\r\n            `,\r\n            \"users\": {\r\n                \"GUEST\": {\r\n                    \"disabled\": false,\r\n                    \"admin_channels\": [\"*\"]\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>Lo que nos importa para este tutorial es el c\u00f3digo que se comunica con el Sync Gateway a trav\u00e9s de nuestra aplicaci\u00f3n. Ahora vamos a revisar el <strong>app\/views\/list\/list.js<\/strong> e incluir algo de c\u00f3digo en el archivo <strong>pageLoaded<\/strong> funci\u00f3n. Abra el archivo e incluya lo siguiente:<\/p>\n<pre><code>\r\nvar push = database.createPushReplication(\"https:\/\/localhost:4984\/test-database\");\r\nvar pull = database.createPullReplication(\"https:\/\/localhost:4984\/test-database\");\r\n\r\npush.setContinuous(true);\r\npull.setContinuous(true);\r\n\r\npush.start();\r\npull.start();\r\n<\/code><\/pre>\n<p>En lo anterior estamos diciendo a nuestra aplicaci\u00f3n que vamos a empujar y tirar de la misma puerta de enlace de sincronizaci\u00f3n que se est\u00e1 ejecutando localmente. Las r\u00e9plicas se producir\u00e1n continuamente en ambas direcciones. Entonces, finalmente, iniciamos el proceso.<\/p>\n<p>Con los datos que se cargan y descargan necesitamos una manera de actualizar la interfaz de usuario cuando sea necesario. Anteriormente he mencionado que s\u00f3lo est\u00e1bamos consultando una vez cuando se carga la p\u00e1gina. Esto es porque en realidad vamos a utilizar un oyente para escuchar los cambios. Es m\u00e1s eficiente que consultar continuamente cantidades potencialmente masivas de datos. Dentro de tu <strong>app\/views\/list\/list.js<\/strong> dentro del archivo <strong>pageLoaded<\/strong> incluya el siguiente c\u00f3digo:<\/p>\n<pre><code>\r\ndatabase.addDatabaseChangeListener(function(changes) {\r\n    var changeIndex;\r\n    for(var i = 0; i &lt; changes.length; i++) {\r\n        var documentId;\r\n\r\n        documentId = changes[i].getDocumentId();\r\n        changeIndex = indexOfObjectId(documentId, personList);\r\n        var document = database.getDocument(documentId);\r\n\r\n        if(changeIndex == -1) {\r\n            personList.push(document);\r\n        } else {\r\n            personList.setItem(changeIndex, document);\r\n        }\r\n    }\r\n});\r\n<\/code><\/pre>\n<p>El objetivo aqu\u00ed es recoger un cambio, ver si ese documento ya existe en la lista, si no existe, a\u00f1adirlo, si no, cambiarlo. La funci\u00f3n para encontrar d\u00f3nde existe un documento en la lista se puede ver a continuaci\u00f3n:<\/p>\n<pre><code>\r\nfunction indexOfObjectId(needle, haystack) {\r\n    for(var i = 0; i &lt; haystack.length; i++) {\r\n        if(haystack.getItem(i) != undefined &amp;&amp; haystack.getItem(i).hasOwnProperty(\"_id\")) {\r\n            if(haystack.getItem(i)._id == needle) {\r\n                return i;\r\n            }\r\n        }\r\n    }\r\n    return -1;\r\n}\r\n<\/code><\/pre>\n<p>Tal vez no sea la forma m\u00e1s eficiente de actualizar una vista de lista, pero funciona para este ejemplo.<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/april\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/couchbase-nativescript-animation.gif\" \/><\/p>\n<p>En este punto, si ejecuta Sync Gateway y su aplicaci\u00f3n, deber\u00eda sincronizar los datos.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Acaba de ver c\u00f3mo crear una plataforma cruzada sencilla, <strong>nativo<\/strong>aplicaci\u00f3n para Android e iOS que se sincroniza usando NativeScript y el plugin Couchbase Lite. M\u00e1s informaci\u00f3n sobre el plugin se puede ver en la p\u00e1gina del proyecto <a href=\"https:\/\/github.com\/couchbaselabs\/nativescript-couchbase\">GitHub<\/a> p\u00e1gina. M\u00e1s informaci\u00f3n sobre Couchbase Mobile en la p\u00e1gina <a href=\"https:\/\/developer.couchbase.com\/?utm_source=blogs&amp;utm_medium=link&amp;utm_campaign=blogs\">Portal para desarrolladores de Couchbase<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>From a personal level, I&#8217;m a huge fan of Telerik NativeScript. It is a cross platform development framework for building native Android and iOS applications using a single codeset, that code set being JavaScript. I had to put emphasis on [&hellip;]<\/p>","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1810,9327],"tags":[1577,1543,1589],"ppma_author":[9032],"class_list":["post-2228","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-mobile","category-javascript","tag-cross-platform","tag-javascript","tag-nativescript"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Couchbase Mobile in a Cross platform Telerik NativeScript App<\/title>\n<meta name=\"description\" content=\"Learn how to create a simple cross platform, native, Android and iOS application. It syncs using NativeScript and the Couchbase Lite plugin.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase Mobile in a Cross Platform Telerik NativeScript App\" \/>\n<meta property=\"og:description\" content=\"Learn how to create a simple cross platform, native, Android and iOS application. It syncs using NativeScript and the Couchbase Lite plugin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-18T22:29:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:15:41+00:00\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Couchbase Mobile in a Cross Platform Telerik NativeScript App\",\"datePublished\":\"2016-04-18T22:29:30+00:00\",\"dateModified\":\"2025-06-14T03:15:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/\"},\"wordCount\":1372,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"cross platform\",\"javascript\",\"nativescript\"],\"articleSection\":[\"Application Design\",\"Couchbase Mobile\",\"JavaScript\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/\",\"name\":\"Couchbase Mobile in a Cross platform Telerik NativeScript App\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-04-18T22:29:30+00:00\",\"dateModified\":\"2025-06-14T03:15:41+00:00\",\"description\":\"Learn how to create a simple cross platform, native, Android and iOS application. It syncs using NativeScript and the Couchbase Lite plugin.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase Mobile in a Cross Platform Telerik NativeScript App\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase Mobile in a Cross platform Telerik NativeScript App","description":"Aprende a crear una sencilla aplicaci\u00f3n multiplataforma, nativa, para Android e iOS. Sincroniza usando NativeScript y el plugin Couchbase Lite.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/","og_locale":"es_MX","og_type":"article","og_title":"Couchbase Mobile in a Cross Platform Telerik NativeScript App","og_description":"Learn how to create a simple cross platform, native, Android and iOS application. It syncs using NativeScript and the Couchbase Lite plugin.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2016-04-18T22:29:30+00:00","article_modified_time":"2025-06-14T03:15:41+00:00","author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Couchbase Mobile in a Cross Platform Telerik NativeScript App","datePublished":"2016-04-18T22:29:30+00:00","dateModified":"2025-06-14T03:15:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/"},"wordCount":1372,"commentCount":3,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["cross platform","javascript","nativescript"],"articleSection":["Application Design","Couchbase Mobile","JavaScript"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/","name":"Couchbase Mobile in a Cross platform Telerik NativeScript App","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-04-18T22:29:30+00:00","dateModified":"2025-06-14T03:15:41+00:00","description":"Aprende a crear una sencilla aplicaci\u00f3n multiplataforma, nativa, para Android e iOS. Sincroniza usando NativeScript y el plugin Couchbase Lite.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-mobile-in-a-cross-platform-telerik-nativescript-app\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase Mobile in a Cross Platform Telerik NativeScript App"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, Defensor del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy es un defensor de las tecnolog\u00edas modernas de desarrollo web y m\u00f3vil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y m\u00f3vil m\u00e1s f\u00e1cil de entender."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2228"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2228\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2228"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}