সমস্যা
যখন গতিশীলভাবে ইউআই-এলিমেন্টগুলি ( shiny.tag
,, shiny.tag.list
...) তৈরি করা হয় তখন প্রায়শই আমি আমার কোড যুক্তি থেকে এটি আলাদা করা এবং সাধারণত tags$div(...)
লুপগুলি এবং শর্তাধীন বিবৃতিতে মিশ্রিত, নেস্টেড এর সংশ্লেষিত জগাখিচুড়ি শেষ করি difficult দেখতে বিরক্তিকর এবং কুরুচিপূর্ণ হওয়ার সময় এটি ত্রুটি-প্রবণও রয়েছে, যেমন এইচটিএমএল-টেম্পলেটগুলিতে পরিবর্তন করার সময়।
প্রজননযোগ্য উদাহরণ
ধরা যাক আমার কাছে নিম্নলিখিত তথ্য-কাঠামো রয়েছে:
my_data <- list(
container_a = list(
color = "orange",
height = 100,
content = list(
vec_a = c(type = "p", value = "impeach"),
vec_b = c(type = "h1", value = "orange")
)
),
container_b = list(
color = "yellow",
height = 50,
content = list(
vec_a = c(type = "p", value = "tool")
)
)
)
আমি যদি এখন এই কাঠামোটি ইউআই-ট্যাগগুলির মধ্যে ঠেলাতে চাই তবে আমি সাধারণত এমন কিছু দিয়ে শেষ করি:
library(shiny)
my_ui <- tagList(
tags$div(
style = "height: 400px; background-color: lightblue;",
lapply(my_data, function(x){
tags$div(
style = paste0("height: ", x$height, "px; background-color: ", x$color, ";"),
lapply(x$content, function(y){
if (y[["type"]] == "h1") {
tags$h1(y[["value"]])
} else if (y[["type"]] == "p") {
tags$p(y[["value"]])
}
})
)
})
)
)
server <- function(input, output) {}
shinyApp(my_ui, server)
যেমন আপনি দেখতে পাচ্ছেন, এটি ইতিমধ্যে আমার অদৃশ্য উদাহরণগুলির সাথে তুলনায় কিছুটা অগোছালো এবং এখনও কিছুই নয়।
পছন্দসই সমাধান
আমি আর এর জন্য একটি টেম্প্লেটিং ইঞ্জিনের কাছাকাছি এমন কিছু সন্ধান করার আশায় ছিলাম যা টেমপ্লেট এবং ডেটা আলাদাভাবে সংজ্ঞায়িত করতে দেয় :
# syntax, borrowed from handlebars.js
my_template <- tagList(
tags$div(
style = "height: 400px; background-color: lightblue;",
"{{#each my_data}}",
tags$div(
style = "height: {{this.height}}px; background-color: {{this.color}};",
"{{#each this.content}}",
"{{#if this.content.type.h1}}",
tags$h1("this.content.type.h1.value"),
"{{else}}",
tags$p(("this.content.type.p.value")),
"{{/if}}",
"{{/each}}"
),
"{{/each}}"
)
)
পূর্ববর্তী প্রচেষ্টা
প্রথমত, আমি ভেবেছিলাম যে shiny::htmlTemplate()
কোনও সমাধান প্রস্তাব দিতে পারে তবে এটি কেবল ফাইল এবং পাঠ্য স্ট্রিংয়ের সাথে কাজ করবে, shiny.tag
গুলি নয় । আমি হুইস্কারের
মতো কিছু আর-প্যাকেজগুলিতেও নজর রেখেছি তবে সেগুলির একই সীমাবদ্ধতা রয়েছে বলে মনে হয় এবং ট্যাগ বা তালিকার কাঠামো সমর্থন করে না।
ধন্যবাদ!
htmlTemplate()
শর্তসাপেক্ষ এবং লুপস আলা হ্যান্ডেলবারগুলি, গোঁফ, পাতলা করার অনুমতি দেয় ...
www
ফোল্ডারের অধীনে একটি সিএসএস ফাইল সংরক্ষণ করতে পারেন এবং তারপরে স্টাইল শিটগুলি প্রয়োগ করতে পারেন?