【发布时间】:2016-11-28 13:43:14
【问题描述】:
slick javascript 库 (http://kenwheeler.github.io/slick/) 给我留下了深刻的印象,并希望将其合并到我闪亮的应用程序/flexboard 页面中。
我想在 R 中使用 htmlwidgets 包并包含 slick js 库,因此首先尝试按照在线文档 (http://www.htmlwidgets.org/develop_intro.html) 中的建议创建一个包,方法是执行以下操作。 .
devtools::create("slick")
setwd("slick")
htmlwidgets::scaffoldWidget("slick")
我从https://github.com/kenwheeler/slick/archive/1.6.0.zip下载了js库
并将其放入包的结构中,这样我就有了一个看起来有点像这样的文件结构。
R/
| slick.R
inst/
|-- htmlwidgets/
| |-- slick.js
| |-- slick.yaml
| |-- lib/
| | |-- slick-1.6.0/
| | | |-- slick/
| | | | |-- slick.min.js
| | | | |-- slick.js
| | | | |-- slick.css
| | | | |-- slick-theme.css
我的slick.yaml 文件看起来像这样...
dependencies:
- name: slick
version: 1.6.0
src: htmlwidgets/lib/slick-1.6.0
script:
- slick/slick.min.js
- slick/slick.js
stylesheet:
- slick/slick.css
- slick/slick-theme.css
但是对于如何调整inst/htmlwidget/slick.js 文件和R/slick.R 文件,我真的很困惑,这种方式可以采用网址向量并将它们显示在闪亮的应用程序中。原因是它似乎与提供的示例不匹配类似的输入数据概念。
为了重现性和使用包中示例中提供的相同 URL,我提供了一个占位符 img url 的向量,我想将其用作内容。对于轮播中的每张图片。
image_vec <- paste0("http://placehold.it/350x300?text=",seq(1:9))
也许我可能需要使用这样的东西?...
lapply(image_vec,function(y){div(img(src=y))})
如往常一样,我们将不胜感激。
编辑
我的新slick.yaml 文件如下所示...在@NicE 的回答帖子之后...我错过了什么吗?
dependencies:
- name: jquery
version: 3.1.0
src: htmlwidgets/lib
script:
- jquery-3.1.0.min.js
- name: slick
version: 1.6.0
src: htmlwidgets/lib/slick-1.6.0
script:
- slick/slick.min.js
- slick/slick.js
stylesheet:
- slick/slick.css
- slick/slick-theme.css
现在我的文件结构如下所示:
R/
| slick.R
inst/
|-- htmlwidgets/
| |-- slick.js
| |-- slick.yaml
| |-- lib/
| | |-- jquery-3.1.0.min.js
| | |-- slick-1.6.0/
| | | |-- slick/
| | | | |-- slick.min.js
| | | | |-- slick.js
| | | | |-- slick.css
| | | | |-- slick-theme.css
我的/inst/htmlwidgets/slick.js 如下所示
HTMLWidgets.widget({
name: 'slick',
type: 'output',
factory: function(el, width, height) {
// TODO: define shared variables for this instance
// create new slick object witht the given id?
var sl = new slick(el.id);
return {
renderValue: function(x) {
//add class to the div and center it
el.setAttribute("class",x.class);
el.style.margin = "auto";
//add images to the div
content='';
for(var image in x.message)
{
content += '<div><img src="' + x.message[image] + '"/></div>';
}
el.innerHTML = content;
//initialize the slider.
$(document).ready(function(){
$("."+x.class).slick(x.options);
});
},
resize: function(width, height) {
// TODO: code to re-render the widget with a new size
}
};
}
});
【问题讨论】:
-
您的项目是否托管在 github 上?
标签: javascript r shiny htmlwidgets