【问题标题】:Polymer Dart core-style ref not resolved聚合物 Dart 核心样式参考未解决
【发布时间】:2014-11-20 04:52:21
【问题描述】:

当我将参数传递给 Polymer 元素时,核心样式 ref 没有得到解析。

这是子代码:

<link rel="import" href="packages/polymer/polymer.html">
<link rel="import" href="packages/core_elements/core_style.html">

<core-style id="s1" unresolved> div { background: yellow; } </core-style>
<core-style id="s2" unresolved> div { background: pink;   } </core-style>

<polymer-element name='test-cell' attributes='s t' noscript>
  <template>
      <core-style ref="{{s}}"></core-style>
      <div>{{t}}</div>
  </template>
</polymer-element>

如您所见,有两种核心样式。

这是父代码。它接受一个 List 并使用文本和样式引用实例化“test-cell”。

<polymer-element name='test-rows'>
  <template>
    <template repeat='{{ v in x }}'>
      <test-cell s={{v.s}} t={{v.t}}></test-cell>
    </template>
  </template>
</polymer-element>

在这个简单的例子中,Dart 代码是内联的。这里是:

  <script type='application/dart'>
    import  'package:polymer/polymer.dart';

    //======================================
    class Info {
      String  s, t;
      Info(this.s, this.t) {}
      }
    //======================================
    @CustomTag('test-rows')
    class TestRows extends PolymerElement {

      @observable List<Info> x = toObservable([]);

      //-----------------------------------
      TestRows.created() : super.created() {
        x.add(toObservable(new Info('s1', 'first' )));
        x.add(toObservable(new Info('s2', 'second')));
        }
      }
  </script>

在生成的 HTML 中,文本通过 OK,但核心样式实例都有

ref="{{s}}"

并且不应用样式。我可以通过一些替代注释强制解析样式参考参数吗?它本质上是一个 final/const。

【问题讨论】:

    标签: dart polymer dart-polymer


    【解决方案1】:

    更新

    我认为问题在于您的test-cell 元素中的noscript
    据我所知,在没有支持脚本 (noscript) 的情况下,绑定在 Dart 中无法使用 Polymer 元素。

    我认为在您的情况下,&lt;test-cell&gt; 元素需要一个字段

    @observable
    var s;
    

    使这项工作。

    原创

    您的代码不会显示您是否曾为 s 赋值。

    我怀疑toObservable 是否适用于普通的 Dart 对象。据我所知,这是针对列表和地图的。

    Info 类应如下所示,您无需使用 toObservable()

      class Info extends Object with Observable {
        @observable
        String  s;
    
        @observable 
        String t;
    
        Info(this.s, this.t) {}
      }
    

    【讨论】:

    • 感谢您的快速回复。关于您的第一条评论,通过 Dart 简写 this.s 为 s 分配了一个值。很遗憾,你的建议不起作用。令人惊讶的是,{{v.t}} 被正确提取,并且 t 的值出现在 div 中。如果我将 {{s}} 添加到 div,{{v.s}} 也被正确提取,并且 s 的值出现在 div 中。但无论我尝试什么,包括您的建议,引用都分配有字符串“{{v.s}}”,没有评估/插值。
    • 抱歉,我在解释您的代码时遇到了一些麻烦。我不习惯内联 Dart 脚本,而且我自己目前正在与相当棘手的问题作斗争;-)。我想我现在明白你的代码了。要仅支持您问题中的代码,您根本不需要任何可观察的。 @observable 仅在模型更改之后视图最初绑定时才需要更新视图。我再看看……
    • 你是对的,添加脚本会有所作为。正如您所建议的那样,我必须添加可观察对象,以及 t 的可观察对象。可悲的是,车把仍未评估,我仍然得到 ref="{{s}}"。您知道是否有任何方法可以获取表达式的“当前评估值”?我还尝试通过将类 Info 定义更改为“final String s”来给软件一个提示,但这没有用。是否可以让属性更改内部 var,检测 var 中的更改,最后更新 ref?
    • 经过这样的一天(这里是 18:30),我的大脑拒绝处理这样的问题。您可以尝试使用 @PublishedProperty(reflect: true) 而不是 @observable 来使 Polymer 使属性值在 DOM 中可用(不仅在内部)。明天我可以再仔细看看。
    • 通过 'attached' 回调修复属性将正确的值放入 'ref'。但它没有任何效果。我看不到强制绑定重新评估的方法。您可以通过挖掘核心样式(context['CoreStyle']['list'][s]),提取cssText字符串并将其作为样式应用来获得效果(通过jsInterop)。但是生命还不够长;-)
    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 2018-11-17
    • 2015-06-16
    • 2013-08-18
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多