使用Polymer,我尝试创建重新使用markItUp的组件,以便我可以在需要时使用富文本编辑器。
但是,尽可能尝试,我无法正确初始化它。 jQuery选择器根本找不到textarea元素来执行它的魔力。我已经尝试过多次添加事件监听器,响应特定事件,并且很可能是由于我缺乏Javascript经验,我无法让所有人一起工作。这是我到目前为止的内容(请注意,此文件位于名为" rich-textarea"的元素下的文件夹中):
<link rel="import" href="../../bower_components/polymer/polymer.html">
<link rel="stylesheet" type="text/css" href="../../bower_components/markitup-1x/markitup/skins/markitup/style.css">
<link rel="stylesheet" type="text/css" href="../../bower_components/markitup-1x/markitup/sets/default/style.css">
<script type="text/javascript" src="../../bower_components/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src="../../bower_components/markitup-1x/markitup/jquery.markitup.js"></script>
<script type="text/javascript" src="../../bower_components/markitup-1x/markitup/sets/default/set.js"></script>
<polymer-element name="rich-textarea" attributes="rows cols value">
<template>
<textarea class="makeItRich" rows="{{rows}" cols={{cols}}" value="{{value}}"></textarea>
</template>
<script>
Polymer('rich-textarea', {
value: "",
rows: 25,
cols: 80,
// here and below are where I need help
domReady: function() {
$(document).ready(function() {
$(".makeItRich").markItUp(mySettings);
});
}
});
</script>
</polymer-element>
非常感谢任何帮助。我认为这个问题对聚合物来说是一个很好的试金石,因为它将三种技术结合在一起。如果这&#34;只是工作&#34;,可能大多数事情可能会继续前进。谢谢你的时间。
答案 0 :(得分:7)
$(".makeItRich")
将无效,因为textarea位于元素的ShadowRoot中,而JQuery将无法找到它。此外,CSS的范围限定为元素,因此您必须将CSS链接放在模板中。
这在我尝试时起作用了:
<link rel="import" href="../components/polymer/polymer.html">
<link rel="import" href="../components/jquery2-import/jquery2-import.html">
<script type="text/javascript" src="markitup/jquery.markitup.js"></script>
<script type="text/javascript" src="markitup/sets/default/set.js"></script>
<polymer-element name="markitup-element" attributes="rows cols value">
<template>
<style>
:host {
display: block;
}
</style>
<link rel="stylesheet" type="text/css" href="markitup/skins/markitup/style.css">
<link rel="stylesheet" type="text/css" href="markitup/sets/default/style.css">
<textarea id="rich" rows="{{rows}" cols={{cols}}" value="{{value}}"></textarea>
</template>
<script>
Polymer({
value: "",
rows: 25,
cols: 80,
domReady: function() {
$(this.$.rich).markItUp(mySettings);
}
});
</script>
</polymer-element>
答案 1 :(得分:1)
我认为这个问题是对聚合物的良好试金石
Shadow DOM(由Polymer使用)本质上是将scoping
的概念添加到CSS和DOM中。根据定义,这意味着假设一个巨大的全局范围的技术根本不能与Shadow DOM一起使用。
例如,document.querySelector
将无法在Shadow DOM中找到元素(再次,按设计)。类似地,主文档中的CSS规则不会到达Shadow DOM内部的元素(除非这些规则是Shadow DOM感知的)。
出于这个原因,众所周知许多现有技术今天不与聚合物合作。
扩展DOM和CSS的能力是强大的,并且是一个巨大的飞跃,但它需要一些适应才能充分利用。
答案 2 :(得分:0)
这可能不是一个答案,但需要来自学识渊博的人的一些建议
jQuery.noConflict();
$ = function(selector,context){
if (typeof selector === "string") {
var that = document.querySelector("el-test").shadowRoot;
return new jQuery.fn.init(that.querySelectorAll(selector));
//return new jQuery.fn.init(selector, that);
}else{
return new jQuery.fn.init(selector,context);
}
};
$.fn = $.prototype = jQuery.fn;
jQuery.extend($, jQuery);
上面是我用来扩展jquery构造函数(reference)的内容。在此之后,我已经能够在Polymer事件中使用jquery选择器。让我知道什么是pifalls(如果有的话,我认为有)
小提琴在 - http://jsbin.com/IVodePuS/106/edit?html,output
由于