سؤال

The only solid example I could find for Dart Polymer doesn't use any parameters. How can I pass parameters to the template. Is it done through the constructor?

My specific example is that I have a card element with a title, and I want to pass the title of the card as a string to the element.

I have looked at Passing data to a Polymer element

but this is not exactly what I want to do. I want to pass data from within dart code.

هل كانت مفيدة؟

المحلول

The constructor of elements is called from Polymer and there is no way to pass parameters.

You can as @Vloz wrote, assign values after the element was created or you can use binding as in the question you linked (Passing data to a Polymer element) using bindings.

نصائح أخرى

If you are creating a custom element you can use a factory constructor:

class MyElement extends HtmlElement {
  int _foo;
  factory MyElement(int foo) => new Element.tag('my-tag').._foo = foo;
  MyElement.created() {
     // Careful _foo has not been assigned yet.
  }
}

main() {
   document.register('my-tag', MyElement);
   var element = new MyElement(42);
}

I assume this also works for PolymerElements, but I haven't tried this myself.

even though this is a bit old: You actually can pass parameters like this:

<my-custom-element booleanAttr valueAttr="test"></my-custom-element>

And your custom element should look something like:

@CustomTag('my-custom-element')
class MyCustomElement extends PolymerElement {
  ...
  @published bool booleanAttr;
  @published String valueAttr;
  ...
}

-- EDIT --

But as already pointed out this can be easily done for polymerelements with a factory:

import 'package:polymer/polymer.dart';
import 'dart:html';

@CustomTag('my-custom-element')
class MyCustomElement extends PolymerElement {
  String a;

  factory MyCustomElement.custom(String _a) {
    MyCustomElemente = new Element.tag('my-custom-element');
    e..a = _a
    // ...
    ..initialized();
    return e;
  }

  MyCustomElement.created() : super.created() {

  }

  void initialized() {
    print("initialized: " + a);
  }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top