2016-03-25 16 views
0

Titanium Appelerator özgün modülünün yöntemini doğru olarak nasıl çağıracağımızı sormak için yazıyoruz.Appelerator Platformunun Windows yerel modülüne bir yöntem nasıl eklenir

Titanyum SDK: 5.2.0
Appcelerator CLI: Bizim geliştirme ortamı aşağıdaki gibidir 5.2.0
TabletPC: Windows10pro

Bizim modülü aşağıdaki prosedürlere geliştirilmiştir ;

(1) https://github.com/appcelerator/titanium_mobile_windows#module-development belgesine atıfta bulunan bir modül oluşturduk. Modüle ek bir aaa() yöntemi eklenmiştir.

cd MY_WORKSPACE 
ti create -p windows -t module //create a module project 
cd MY_MODULE_NAME/windows 
ti build -p windows -T ws-local //build my module project 

(2) bir pencere uygulaması yukarıda modülü çağrı için oluşturulur, ve bir uygulama modülü çağrı sırasında bir hata oldu. Bununla birlikte, aaa() yöntemini çağırırken, aşağıdaki gibi bir Titanyum hata iletisi oluştu; “aaa() yöntemi mevcut değil”.

Windows 10 için Titanium windows platformunda, modül için dll doğru şekilde oluşturuldu. Öyleyse, kaynağımızın hangi bölümlerinin doğru olmadığını merak ediyoruz;

(1) aaa() yönteminin tanımı doğru değil. (2) Yerel modülü çağırmak için kullanılan kaynak kodu doğru değil. (3) aaa() yöntemini çağırmak için kullanılan kaynak kodu doğru değil.

Kaynak kodumuzu aşağıdaki gibi ekledik ve görüş ve önerileriniz için şimdiden teşekkür ederiz.

Kod aşağıdaki gibidir.

pencere/src/JpNativeModuleExample.cpp

#include "JpNativeModuleExample.hpp" 
#include "Titanium/detail/TiImpl.hpp" 

namespace Jp 
{ 
     NativeModuleExample::NativeModuleExample(const JSContext& js_context) TITANIUM_NOEXCEPT 
       : JSExportObject(js_context) 
     { 
       TITANIUM_LOG_DEBUG("NativeModuleExample::ctor Initialize"); 
     } 

     void NativeModuleExample::postInitialize(JSObject& js_object) 
     { 
     } 

     void NativeModuleExample::postCallAsConstructor(const JSContext& js_context, const std::vector<JSValue>& arguments) 
     { 
     } 

     //add new method 
     void NativeModuleExample::aaa() TITANIUM_NOEXCEPT 
     { 
     } 

     void NativeModuleExample::JSExportInitialize() 
     { 
       JSExport<NativeModuleExample>::SetClassVersion(1); 
       JSExport<NativeModuleExample>::SetParent(JSExport<JSExportObject>::Class()); 
     } 
} 

pencere/İhtiyacınız senin fonksiyonunu etkinleştirmek için/JpNativeModuleExample.hpp

#ifndef _JPNATIVEMODULEEXAMPLE_HPP_ 
#define _JPNATIVEMODULEEXAMPLE_HPP_ 

#include "JpNativeModuleExample_EXPORT.h" 
#include "Titanium/detail/TiBase.hpp" 
#include "Titanium/Module.hpp" 

namespace Jp 
{ 
     using namespace HAL; 

     class JPNATIVEMODULEEXAMPLE_EXPORT NativeModuleExample : public JSExportObject, public JSExport<NativeModuleExample> 
     { 
       public: 
         NativeModuleExample(const JSContext&) TITANIUM_NOEXCEPT; 
         void aaa() TITANIUM_NOEXCEPT; 
         virtual void postInitialize(JSObject& js_object) override; 
         virtual void postCallAsConstructor(const JSContext& js_context, const std::vector<JSValue>& arguments) override; 

         virtual void aaa();  //add new method 

         virtual ~NativeModuleExample()        = default; 
         NativeModuleExample(const NativeModuleExample&)   = default; 
         NativeModuleExample& operator=(const NativeModuleExample&) = default; 
#ifdef TITANIUM_MOVE_CTOR_AND_ASSIGN_DEFAULT_ENABLE 
         NativeModuleExample(NativeModuleExample&&)     = default; 
         NativeModuleExample& operator=(NativeModuleExample&&)  = default; 
#endif 

         static void JSExportInitialize(); 

     }; 
} 
#endif // _JPNATIVEMODULEEXAMPLE_HPP_ 

örnek kod

var nativemoduleexample = require('jp.NativeModuleExample'); 
Ti.API.info("module is => " + nativemoduleexample); //no problem 
var aaa = nativemoduleexample.aaa(); //titanium error is displayed 

$.index.open(); 

cevap

1

dahil TITANIUM_ADD_FUNCTION kullanarak JSExportInitialize() numaralı telefondan kaydettirmek için. Ti.UI.Button ve Ti.UI.Window gibi TitaniumKit altındaki çalışma örneklerine göz atmak isteyebilirsiniz. Sonra

void NativeModuleExample::JSExportInitialize() 
{ 
    JSExport<NativeModuleExample>::SetClassVersion(1); 
    JSExport<NativeModuleExample>::SetParent(JSExport<JSExportObject>::Class()); 
    TITANIUM_ADD_FUNCTION(NativeModuleExample, aaa); 
} 

Ve böyle işlevini tanımlamak için TITANIUM_FUNCION kullanmak

...

TITANIUM_FUNCTION(NativeModuleExample, aaa) 
{ 
    aaa(); 
    return get_context().CreateUndefined() 
} 
İlgili konular