gpt4 book ai didi

Dart Polymer 1.0 行为 - 未找到方法和需要 setter/getter

转载 作者:行者123 更新时间:2023-12-03 03:27:15 25 4
gpt4 key购买 nike

我想在 Dart 中编写一个简单的行为以供自定义元素使用。

@behavior
abstract class AlignmentBehavior implements PolymerBase {

@Property()
bool alignTop = false;
// more properties ...

ready() {
updateAlignment();
}

@reflectable
updateAlignment([_,__]) {
// reference to the element the Behavior is attached to.
// 1) Is that the correct way?
var ele = Polymer.dom(root);

// We need to inherit from PolymerBase to access set(...)
// 2) Is that the correct way?
set('alignTop', aTop);
// .. to more stuff
}

}

我的前两个问题已经写在代码中了。如何访问行为附加到的元素?这样做的正确方法是什么?我目前使用 Polymer.dom(root)但我不知道这是否有效,因为我有一些运行时错误,我将在本文后面解释。访问底层元素的官方方式是什么?是使用 JsObject 吗?是否从父 PolymerElement 调用 Behavior 函数并通过 this ,或者您根本不应该访问它?

另一个问题是我是否必须从 PolymerBase 继承。 Github wiki 上的 Behavior 示例并没有这样做,而是为了访问诸如 set 之类的方法。修改 @Property我必须继承它。这样做的正确方法是什么?

我的最后两个问题是关于我得到的错误。一个错误要求我为我的属性实现 getter 和 setter,例如为 alignTop 添加 getter 和 setter。
最后但同样重要的是,我不能调用 updateAlignment()来自我的自定义元素。它说 Class 'MainApp' has no instance method 'updateAlignment'.

最佳答案

1)

var ele = Polymer.dom(root);



如果你想访问元素的 DOM,这很好。
只需 root给你同样的AFAIK。

如果要访问元素类实例,则无需执行任何操作。它是 this但这无论如何都隐含在 Dart 中。
您只能访问 mixin 中已知的内容。要让 mixin 知道“事物”,您可以创建一个接口(interface)类。
abstract class MyComponentInterface {
void someFunction();
int someField;
String get someValue;
set someValue(String value);
...
}

然后在 mixin 和元素类中实现接口(interface),你就有了一个共享契约。
abstract class AlignmentBehavior implements MyComponentInterface, PolymerBase {

mixin 现在可以访问成员了,因为 implements MyComponentInterface` 声称它们将存在并且
class MyComponent extends PolymerElement with AlignmentBehavior {

将迫使您实现它以履行 mixin 的契约(Contract)。

2)看起来不错

3)

Another question is whether I have to inherit from PolymerBase or not.



与 1) 基本相同 Dart 中的任何 Polymer 元素都必须扩展 PolymerBase .能够访问 PolymerBase 的成员在 mixin 中,它也必须实现它。这不会导致任何限制,因为 mixin 将应用于的类无论如何都会履行该契约(Contract)。

如果您不需要访问 PolymerBase 提供的任何成员没有必要实现它。

关于Dart Polymer 1.0 行为 - 未找到方法和需要 setter/getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35474526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com