小编Fel*_*lix的帖子

获得聚合物父元素

所以我现在一直在使用Polymer大约一天,而且我在解决这个问题上遇到了麻烦,所以如果我的方法偏离基础,请不要觉得有必要解决这个问题,而是指出我正确的方向.

我有自定义元素中的自定义元素,我希望子元素影响父元素的属性.我正在采取的方法是创建一个单击处理程序,关闭IIFE中的父元素,然后将该处理程序传递给子组件.像这样......

Polymer({
  ready: function(){
     this.superHandler = (function(p) {
        return function() {
          // "this" here will be the sub-component
          p.title = this.title;
        }
     })(this);
  }
});
Run Code Online (Sandbox Code Playgroud)

父元素在其模板中使用它的方式如...

<polymer-element name="parent-element">
  <template>
    <sub-element on-click={{superHandler}} />
  </template>
</polymer-element>
Run Code Online (Sandbox Code Playgroud)

这(在我的真实代码中,虽然它可能存在这里的拼写错误)在除了IE之外的所有东西都可以工作,我知道IE不是官方支持的,但是它非常接近我不想放弃它.我想避免的事情是重复引用parentNodes和shadowRoots以获取我正在寻找的父级.

编辑

我忘了提到它在IE中是如何失败的,以及为什么我要避免使用parentNode调用.在IE中,当它专门派遣事件聚合物.js的第9131行时,变量"method"和obj [method]中的引用是IE中的字符串,因此没有方法适用.我想避免使用parentNode的原因是因为调用者不是直接父节点,所以我不想继续获取parentNodes,直到找到正确的节点,因为当我可以命名变量时代码更容易理解.

编辑2

我现在要做的事情(因为它在IE9中工作),虽然我将问题留给更好的答案是继续使用IIFE,返回一个带有参数的函数.然后,孩子将通过querySelector找到感兴趣的父母.这意味着孩子必须具备父母的先验知识和调用方法,这不是理想的,但是...... IE.

所以父母将其设置为......

Polymer('parent-element', {
  ready: function(){
     this.superHandler = (function(p) {
        return function(child) {
          p.title = chile.title;
        }
     })(this);
  }
});
Run Code Online (Sandbox Code Playgroud)

并且孩子必须通过查询选择器获取它,例如'parent-element'并且知道名称'superHandler'(不是实际名称)

Polymer('child-element',{
        clickHandler: function(){
            var p = document.querySelector('parent-element').superHandler;
            p(this);
        }
    });
Run Code Online (Sandbox Code Playgroud)

好主意?

javascript polymer

15
推荐指数
2
解决办法
1万
查看次数

从PhantomJS中调用变量调用injectJS

我已经按照从入门页面注入jQuery的示例,这很好用.我在同一目录中有一个jQuery的本地副本,并执行类似...

if(page.injectJs('jquery.min.js')) {
  page.evaluate(function(){
    //Use jQuery or $ 
  }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试注入自己的脚本时,我没有任何函数可用.假设我有一个名为myScript.js的脚本

function doSomething() {
  // doing something...
}
Run Code Online (Sandbox Code Playgroud)

我不能再使用doSomething ...

if(page.injectJs('myScript.js')) {
  console.log('myScript injected... I think');
  page.evaluate(function() {
    doSomething();
  });
} else { 
  console.log('Failed to inject myScript'); 
}
Run Code Online (Sandbox Code Playgroud)

我试过了

window.doSomething = function() {};
Run Code Online (Sandbox Code Playgroud)

document.doSomething = function() {};
Run Code Online (Sandbox Code Playgroud)

同时没有运气,以及尝试在随后的page.evaluate()中使用window.doSomething()或document.doSomething()调用它们.

phantomjs

8
推荐指数
1
解决办法
8952
查看次数

XMLStreamWriter writeCharacters没有转义

如何使用XMLStreamWriter准确写出我输入的内容?例如,如果我创建脚本标记并用javascript填充它,我不希望我的所有单引号都出现为'

这是我写的一个小测试,它没有使用我已经实现的任何抽象,只是调用writeCharacters.

  public void testWriteCharacters() {
    StringWriter sw = new StringWriter();
    XMLOutputFactory factory = XMLOutputFactory.newInstance();

    StringBuffer out = new StringBuffer();
    try {
      XMLStreamWriter writer = factory.createXMLStreamWriter(sw);
      writer.writeStartElement("script");
      writer.writeAttribute("type","text/javascript");
      writer.writeCharacters("function hw(){ \n"+
      "\t alert('hello world');\n" +
      "}\n");
      writer.writeEndElement();
      out.append(sw);
    } catch (XMLStreamException e) {
    } finally {
      try {
        sw.close();
      } catch(IOException e) {
        e.printStackTrace();
      }
    }
    System.out.println(out.toString());
  }
Run Code Online (Sandbox Code Playgroud)

这为围绕hello world的单引号生成了一个实体.

java xml

5
推荐指数
2
解决办法
1万
查看次数

用卡布奇诺清除和重绘(Objective-J)

基本上我有这个

@implementation MyView : CPView
{
  CPArray MyPanelArray;
}

// Populate the MyPanelArray and position each panel
- (void)initMyView
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

MyPanels几乎是图像的包装器.当一切都被初始化时,它就会很好.然后我有一个滑块来操纵图像的位置,我知道如何重绘所有内容的唯一方法是用新实例覆盖MyView并在主内容中执行类似的操作

// Has the correct effect, but feels wrong
- (void)sliderAction:(id)sender
{
    var myNewView = [MyView initWithPositionValue:[sender value]];
    [_contentView replaceSubview:_myView with:myNewView];
    _myView = myNewView;
}
Run Code Online (Sandbox Code Playgroud)

它可以正常工作,但我怀疑这是"正确的方法".

*我知道我可以使用CPCollectionView进行基本设置,但它不能用于我想要完成的任务.

提前致谢.

cappuccino objective-j

3
推荐指数
1
解决办法
606
查看次数

标签 统计

cappuccino ×1

java ×1

javascript ×1

objective-j ×1

phantomjs ×1

polymer ×1

xml ×1