Muat opsi pilihan secara dinamis dari layanan eksternal dalam dialog Touch UI di AEM?

Masalah saya adalah memuat bidang pilihan dalam dialog UI sentuh dengan opsi dinamis. Opsi ini berasal dari URL eksternal melalui layanan web, saya menggunakan layanan RESTful ini menggunakan url yang ditentukan di salah satu objek javascript global kami seperti

$.get(mec.serviceConfig.baseUrl + '/movies';

Harap dipahami bahwa opsi berasal dari layanan web pihak ketiga, harap jangan menyebutkan sumber data. Setiap kali saya mencari opsi pemuatan pilih secara dinamis saya mendapatkan tutorial ini

Tautan ke Tutorial Ini bukan apa yang saya inginkan.

Di UI klasik, mudah dilakukan dengan optionsProvider.

Di UI sentuh saya mencoba menulis skrip yang mengambil data dari layanan web eksternal melalui pemuatan AJAX ON DIALOG dan mengatur opsi ini di bidang pilih.

Apakah ada pendekatan yang lebih mudah dan lebih baik? Bisakah seseorang membagikan cuplikan kode?


person Oliver    schedule 12.04.2018    source sumber
comment
Saya tidak yakin mengapa Anda tidak ingin menggunakan Datasource yang tepat? Anda dapat menulis kelas Java yang bagus, bersih, dan dapat diuji yang mengambil item dari layanan jarak jauh Anda. Pada akhirnya itu hanyalah Servlet (Sling) yang terdaftar untuk jenis sumber daya tertentu dan kemudian di TouchUI Anda mengatur sumber data Anda ke jenis sumber daya ini. Servlet dipanggil dan mengembalikan sumber data. Jika mau, saya dapat memberi Anda contoh kode untuk ini.   -  person Jens    schedule 12.04.2018
comment
mec.serviceConfig.baseUrl ini adalah variabel javascript yang memiliki url layanan web. Anda mengatakan alih-alih melakukan ini secara langsung melalui javascript, saya harus memanggil sling servlet yang secara internal akan memanggil layanan ini menggunakan HTTpGet dan mengembalikan nilainya ... ya   -  person Oliver    schedule 12.04.2018
comment
@Jens Terlalu berlebihan. Hanya untuk mendapatkan beberapa pasangan/opsi nilai kunci yang tersedia dalam opsi yang dipilih, untuk satu mode penulisan yaitu sentuh dan untuk digunakan hanya dalam mode Penulis.   -  person Oliver    schedule 12.04.2018
comment
Pada akhirnya Anda selalu dapat menulis beberapa kode JS yang melakukan semua ini. Namun menurut pengalaman saya, solusi tersebut seringkali rapuh sehingga sulit untuk menulis pengujian dan memelihara dengan andal selama bertahun-tahun, dll. Anda memperdagangkan solusi yang berpotensi lebih kuat di Java dengan solusi yang lebih mudah diterapkan dalam Javascript (walaupun jika itu bisa terjadi) kalau-kalau kita tidak akan melakukan percakapan ini). Pada akhirnya Anda harus memutuskan berdasarkan kebutuhan proyek Anda.   -  person Jens    schedule 12.04.2018
comment
Saya sepenuhnya setuju dengan @Jens, saya mengatakan hal yang sama di pertanyaan Anda yang lain. Baseurl mungkin di-hardcode di JS Anda, tetapi ini bukan alasan untuk mulai mengacaukan hal-hal lain. Urlnya harus berasal dari aplikasi aem Anda (misalnya backend harus meneruskan url ini ke frontend, bukan sebaliknya). Jadi arsitektur di sini sepertinya mengarah ke arah yang salah. Anda dapat mengatur url dasar Anda melalui OSGI misalnya dan meneruskannya ke beberapa konfigurasi JS (atau mengambilnya dengan ajax). Namun Anda juga dapat menggunakan layanan backend untuk mengimplementasikan hal-hal lain sebagai sumber data, misalnya karena Anda memiliki semua data yang diperlukan di backend.   -  person d33t    schedule 12.04.2018
comment
@d33t Menurut pengalaman saya, cara terbaik untuk memindahkan konfigurasi OSGI ke JavaScript "TouchUI" adalah melalui PageInfoProvider. Juga kelas Java yang bagus, bersih dan pendek yang dapat menambah nilai ke ns.pageInfo.   -  person Jens    schedule 12.04.2018
comment
@Jens Jadi url dasar berasal dari konfigurasi OSGi. Saya berpikir itu terlalu banyak overhead untuk menulis sumber data, menarik baseurl dari file konfigurasi OSGi kemudian membuat panggilan HTTP Get dan kemudian meneruskannya ke opsi yang dipilih. Terlalu banyak yang harus dilakukan dengan jumlah yang terlalu sedikit. Semoga Anda mengerti apa yang ingin saya katakan.   -  person Oliver    schedule 12.04.2018
comment
@ d33t Silakan baca komentar di atas. Terima kasih   -  person Oliver    schedule 12.04.2018
comment
tidak, itu tidak terlalu banyak dan diimplementasikan dengan cepat untuk pengembang berpengalaman yang tahu apa yang dia lakukan. cobalah untuk mengimplementasikan hal-hal dengan cara yang dapat dipahami oleh setiap pengembang aem. tetap menggunakan praktik terbaik Adobe dan cara yang disarankan dalam melakukan sesuatu di aem. dengan cara ini Anda dapat memastikan bahwa solusi Anda mungkin akan berhasil bahkan ketika antarmuka karang benar-benar berubah   -  person d33t    schedule 13.04.2018


Jawaban (1)


Anda harus membuat pendengar JS untuk komponen Anda.

$document.on("dialog-ready", function() {
// there you should find your select field 
//for example
var language = $("[name='./language']").closest(".coral-Select");
//then append to your select field new options from your datasource
});

silakan lihat dokumen: Memperbarui Bidang Pilihan Dialog AEM TouchUI secara dinamis

person Prosis    schedule 06.09.2018